Ako správne limitnuť LEFT JOINOVANÚ tabulky v nette context
- KristianSubweb
- Člen | 146
Ahoj potreboval by som pomocť má Select kde left joinujem dalšiu tabulku. Len problém je v tom že left join tým že vracia viac zaznamov tak mi to prirodzene navyšuje fatch mojich dát.
$testPlanSprintCase = $this->database->table("test_plan_sprint_case")
->select("*, :test_case_run.starttime AS testDateTime")
->where("test_plan_sprint_case.forced_status_id", [2,3])
->where("test_plan_sprint_case.test_plan_sprint_id ", $testPlan->getTestSprintIds())
->fetchAll();
Neviete poraziť teda ako si to groupnem podla :test_case_run.starttime a limitnem na 1?
Ďakujem
- KristianSubweb
- Člen | 146
h4kuna napsal(a):
Zkus sestavit obyčejné sqlko a až ti to bude dávat výsledky, které potřebuješ koukneme na to jak to napsat v nette.
Query je takato.
SELECT *, ( SELECT starttime FROM test_case_run WHERE test_plan_sprint_case_id = test_plan_sprint_case.id ORDER
BY starttime DESC LIMIT 1) AS result FROM test_plan_sprint_case WHERE test_plan_sprint_case.forced_status_id IN
(2,3) AND test_plan_sprint_case.test_plan_sprint_id IN (14,15)
Editoval KristianSubweb (21. 5. 2019 14:02)
- h4kuna
- Backer | 740
No vidíš, tak to nejtěžší máš za sebou, teď už to zvládneš :)
Zformátováno
SELECT *, (
SELECT starttime
FROM test_case_run
WHERE test_plan_sprint_case_id = test_plan_sprint_case.id
ORDER BY starttime DESC
LIMIT 1
) AS result
FROM test_plan_sprint_case
WHERE test_plan_sprint_case.forced_status_id IN (2,3)
AND test_plan_sprint_case.test_plan_sprint_id IN (14,15);
Tak ty dva dotazy samy o sobě jsou jednoduchý na sestavení. Jak se udělá vnořený dotaz to se musím podívat. Dej mi chvilku, třeba to budeš mít rychleji.
- h4kuna
- Backer | 740
Nedohledal jsem jak se dělá vnořený dotaz a Selection není
podporovaný.
Takže je možnost si to sám seskládat ze dvou dotazů.
Kód jsem netestoval.
$sprintCases = $context->table('test_plan_sprint_case')
->where('forced_status_id', [2, 3])
->where('test_plan_sprint_id', [14, 15])
->fetchPairs('id');
$runCases = $context->table('test_case_run')
->select('starttime, test_plan_sprint_case_id')
->where('test_plan_sprint_case_id', array_keys($sprintCases))
->order('starttime DESC')
->limit(1);
foreach ($runCases as $runCase) {
$sprintCases[$runCase->test_plan_sprint_case_id]['starttime'] = $runCase->starttime;
}
Nebo to celé můžeš pustit přímo přes pustit přes database core.
Nicméně v tomto případě bych si pomocí triggeru ukládal poslední test_case_run.id do tabulky test_plan_sprint_case kde bych si udělal sloupeček test_case_run_id a dělal join přes tento sloupeček.
Editoval h4kuna (21. 5. 2019 15:36)
- KristianSubweb
- Člen | 146
h4kuna napsal(a):
Nedohledal jsem jak se dělá vnořený dotaz a Selection není podporovaný.
Takže je možnost si to sám seskládat ze dvou dotazů.Kód jsem netestoval.
$sprintCases = $context->table('test_plan_sprint_case') ->where('forced_status_id', [2, 3]) ->where('test_plan_sprint_id', [14, 15]) ->fetchPairs('id'); $runCases = $context->table('test_case_run') ->select('starttime, test_plan_sprint_case_id') ->where('test_plan_sprint_case_id', array_keys($sprintCases)) ->order('starttime DESC') ->limit(1); foreach ($runCases as $runCase) { $sprintCases[$runCase->test_plan_sprint_case_id]['starttime'] = $runCase->starttime; }
Nebo to celé můžeš pustit přímo přes pustit přes database core.
Nicméně v tomto případě bych si pomocí triggeru ukládal poslední test_case_run.id do tabulky test_plan_sprint_case kde bych si udělal sloupeček test_case_run_id a dělal join přes tento sloupeček.
Super diki už to ide :)