Oznámení
Při použití LEFT JOIN se mi vrací chybné ID záznamu
před 5 lety
- joe
- Člen | 250
Ahoj,
teď v krátkosti, narazil jsem na problém, že při dotazu
SELECT `photo`.*
FROM `photo`
LEFT JOIN user u ON u.`id` = `photo`.`user_id`
se mi při čtení z entit vracelo chybné id, pokud jsem zavolal:
echo $photo->id; // správné ID fotky
echo $photo->user->id; // vracelo ID fotky, ne ID uživatele
Teprve až pokud se dotaz změnil na (výběr něčeho z přijoinované tabulky)
SELECT `photo`.*, u.cokoli
FROM `photo`
LEFT JOIN user u ON u.`id` = `photo`.`user_id`
vracelo se správné ID, měl jsem někde problém nebo to je očekávané chování?
před 5 lety
- castamir
- Člen | 631
jak máš zadefinované entity? Máš nějakou replikovatelnou ukázku?
Editoval castamir (14. 7. 2014 8:36)
před 5 lety
- joe
- Člen | 250
Blíž jsem to prozkoumal a původně (když jsem psal příspěvek) jsem
myslel, že problém je s takovým dotazem, který jsem posílal, ale
není – chyba byla u mě a dotaz byl (výběr jen *
)
SELECT *
FROM `photo`
LEFT JOIN user u ON u.`id` = `photo`.`user_id`
Potom se ID přebíjely. „Problém“ tedy je, že nemůžu nikdy vybírat žádné sloupce z navíc přijoinované tabulky, je to tak? A to z důvodu:
- Pokud by se později změnila struktura tabulek, se kterýma se v dotazu počítá a v některých by byly stejné názvy sloupců – byl by problém.
- Pokud je dotaz (vše by se mělo vybírat jen z tabulky pro entitu/repozitář, kde se SQL spouští)
SELECT `photo`.*
FROM `photo`
LEFT JOIN user u ON u.`id` = `photo`.`user_id`
a v kódu pak zavolám
$photo->id
$photo->user->id
Druhý řádek zapříčiní zavolání dalšího SQL dotazu (na výběr uživatelů), ačkoli data už bych mohl vybírat předchozím dotazem, je to tak?
3. Trochu vidím problém i ve využití filtrů, které mohou joinovat další tabulky…
Nebo jsem něco špatně pochopil? :) (včera to bylo asi už podruhé, co jsem přečetl kompletně celou dokumentaci na webu pro Lean Mapper a jsem z toho teď trochu moudřejší)
Editoval joe (19. 7. 2014 14:21)