Výběr nejvyšší verze projektu se statusem 3
- Honza Florián
- Člen | 7
Ahojte, potřeboval bych pomoct s SQL dotazem. Vůbec si s ním nevím
rady.
Jde o to, že si uživatel může vytvořit projekt, který může vracet až
o 3 verze dozadu. Projekt obsahuje jen jednoduchý text.
Mám 2 tabulky
project:
id | content | owner | description | created_at |
project_version
id | version | status | description | content | project | created_at |
sloupec project obsahuje cizí klíč na tabulku project ⇒ project má vazbu OneHasMany na project_version
Verze mají určitý status, díky kterému se následně vypisují.
Potřeboval bych vypsat verzi s nejvyšším atributem version a statusem 3
.
Dám příklad
- verze 1 má status 3
- verze 2 má status 3
- verze 3 má status 2
Tudíž dotaz vybere verzi 2, protože má nejvišší version a má status 3
:)
Projekt může mít pouze 4 verze. Jakmile se uživatel pokusí přidat 5. tak
se 1. smaže.
Já si to pak přepíšu do Kdyby Doctrine, ale myslím, že na vysvětlení to
bude lepší odpovědět v SQL
Díky moc!
Editoval Honza Florián (28. 10. 2017 10:49)
- Honza Florián
- Člen | 7
Jejda :D asi jsem to špatně vysvětlil. Potřeboval bych, aby se mě vybrala pouze 1 verze od každého projektu. S tím že by se měli objevovat verze řazené podle created_at od nejnovějších ale vzhledem ke všem verzím a né vzhledem k verzím toho projektu.
- Honza Florián
- Člen | 7
Jenu poslední verzi v od každého projektu. Ale jinak chci udělat přehled těchto verzí, takže jich bude celkově víc, akorát tam bude třeba verze 3 od projektu x, pak verze 2 od projektu y, atd …
Editoval Honza Florián (28. 10. 2017 12:22)
- Honza Florián
- Člen | 7
Mám to zapsané následovně:
$projects = $this->em->createQuery('
SELECT PARTIAL p.{id, name, route}
FROM App\Model\Entities\Project p
INNER JOIN p.versions v
WHERE v.status = ' . ProjectVersion::STATUS_AVALIABLE . '
GROUP BY v.project
')
->setMaxResults(10)
->getResult();
$versions = $this->em->createQuery('
SELECT PARTIAL v.{id, version, description}
FROM App\Model\Entities\ProjectVersion v
WHERE v.project IN (:projects)
GROUP BY V.project
')
->setParameter('projects', $projects)
->getResult();
První dotaz vrátí projekty, ve kterých je aspoň 1 verze se statusem
3.
V druhém dotazu se snažím o to vybrat ke každému projektu jednu verzi,
která má status 3 a které jsou řazeny dle verze. Verze by se měli řadit
u každého projektu zvlášť.
Ale radši bych byl, kdyby se to dalo řešit v jednom dotazu.
Editoval Honza Florián (28. 10. 2017 13:14)
- romankubis
- Člen | 1
Skus pouzit GROUP_CONCAT a v nom ORDER BY a daj nejaky SEPARATOR. Potom na prvej pozicii bude ta verzia.