ORDER – řazení podle sloupce z propojené tabulky

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Hanz25
Člen | 38
+
0
-

Mám tento dotaz

		$this->db
->table('web_projekty')
->select("*")
->where("aktivni=3 AND typ=?", $typ)
->order("(podkategorie = 0) ASC")
->order("(podkategorie.index) DESC");

Sloupec ‚podkategorie‘ je cizím klíčem propojen s tabulkou web_podkategorie. Problém je v posledním řádku. Jakmile se pokusím řadit podle sloupce v propojené tabulce, zmizí mi některé záznamy. Nepodařilo se mi zjistit podle čeho ty záznamy mizí, ale z každé podkategorie (kromě 0) se mi zobrazí jen jeden záznam.

Co mám špatně? Děkuji

Editoval Hanz25 (4. 2. 2014 16:06)

vvoody
Člen | 910
+
0
-

určite by pomohol sql dump a vygenerovane dotazy z debug baru

Hanz25
Člen | 38
+
0
-

Vygenerovaný dotaz je tady

SELECT *
FROM `web_projekty`
LEFT JOIN `web_podkategorie` AS `podkategorie` ON `web_projekty`.`podkategorie` =
`podkategorie`.`id`
WHERE (`aktivni`=3 AND `typ`=1)
ORDER BY (`podkategorie` = 0) ASC, (`podkategorie`.`index`) DESC

Když si tento dotaz provedu přes PhpMyAdmina, tak mi správně vyhodí všechny záznamy

Když dumpuji výsledek před foreachem tak mi říká, že data ⇒ NULL.

Editoval Hanz25 (4. 2. 2014 16:29)

vvoody
Člen | 910
+
0
-

dumpuj ne pred ale ve foreachi

Hanz25
Člen | 38
+
0
-
"$project" => Nette\Database\Table\ActiveRow #9b28
table private => Nette\Database\Table\Selection #6e02
connection protected => Nette\Database\Connection #8820 { ... }
reflection protected => Nette\Database\Reflection\DiscoveredReflection #5eba { ... }
cache protected => Nette\Caching\Cache #c396 { ... }
sqlBuilder protected => Nette\Database\Table\SqlBuilder #66ff { ... }
name protected => "web_projekty" (12)
primary protected => "id" (2)
primarySequence protected => FALSE
rows protected => array (28) [ ... ]
data protected => array (28) [ ... ]
dataRefreshed protected => FALSE
globalRefCache protected => array (1) [ ... ]
refCache protected => array (1) [ ... ]
generalCacheKey protected => "f260e95e7a3cddf3e76c505076935dac" (32)
specificCacheKey protected => NULL
aggregation protected => array ()
accessedColumns protected => array (7) [ ... ]
previousAccessedColumns protected => array (7) [ ... ]
observeCache protected => Nette\Database\Table\Selection #6e02 { RECURSION }
keys protected => array (28) [ ... ]
dataRefreshed private => FALSE
isModified private => FALSE

Tady, jestli to nějak pomůže.

Editoval Hanz25 (4. 2. 2014 19:38)

vvoody
Člen | 910
+
0
-

No to si si mal pozrieť hlavne ty :D tam už data prázdne nemáš. Ukáž ako tie záznamy vypisuješ.

Hanz25
Člen | 38
+
0
-

V jednotlivých záznamech mám všechna data. Problém je, že mi to nevybere všechny záznamy.

Některé záznamy mi zmizí jakmile přidám

->order("(podkategorie.index) DESC");
Caine
Člen | 216
+
0
-

Nahraď ->select("*") => ->select("web_projekty.*"), protože uvnitř selectionu je pole (id ⇒ ActiveRow) a tím, že vybíráš všechno, se místo web_projekty.id použije podkategorie.id (resp přepíše se jím).

Hanz25
Člen | 38
+
0
-

Aha, děkuji