Web-TorMedlem sedan nov. 200013 890 inlägg I tabellen "products" har jag bl.a. ett fält som heter "coll". Detta värde matchas mot tabellen "collections_desc" där resten av datan hämtas:
SELECT * FROM products,collections_desc WHERE products.id='.$prodID.' AND collections_desc.id = products.coll
Nu visar det sig att "coll" ibland kan vara tomt (NULL). Då finns det ju inte någon att hämta i "collections_desc" vilket resulterar i fel. Hur löser man det?
überfuzzMedlem sedan apr. 2006409 inlägg Använd LEFT JOIN, då får du även med tomma celler.
Peter SMedlem sedan dec. 20025 483 inlägg Ett tillägg überfuzz förslag: villkoret collections_desc.id = products.coll flyttas från WHERE och blir ditt kommande left join-villkor.
Web-TorMedlem sedan nov. 200013 890 inlägg
überfuzz skrev:
Använd LEFT JOIN, då får du även med tomma celler.
Har du lust att visa var i SQL-frågan man skall stänga in det?
Peter SMedlem sedan dec. 20025 483 inlägg SELECT *
FROM products
LEFT
JOIN collections_desc
ON collections_desc.id = products.coll
WHERE products.id='.$prodID.'
Web-TorMedlem sedan nov. 200013 890 inlägg Det där funkade ju kalas!
Hur gör jag om jag vill ha ytterligare krav på collections_desc?
Där finns en "lang"-kolumn som måste innehålla ett visst värde (t.ex "sv").
/r Glöm det. Det är ju bara att lägga till AND...
überfuzzMedlem sedan apr. 2006409 inlägg
Web-Tor skrev:
Har du lust att visa var i SQL-frågan man skall stänga in det?
Nu fick du queryn av Peter ser jag. Jag trodde att du fastnade på vilken typ av join som hämtar tomma rader. Tål att läsas om ifall du inte vet hur de fungerar.
Web-TorMedlem sedan nov. 200013 890 inlägg Nu har jag stött på ett nytt problem. I samband med den här SQL-frågan vill jag också ha ut viss data från tabellen "products_desc" (här ligger t.ex name, price och annat som hör till produkten). Jag testade med att lägga till ytterligare en LEFT JOIN men det verkar inte fungera så bra: :l
SELECT
*
FROM
products
LEFT JOIN
collections_desc
ON
collections_desc.id = products.coll
LEFT JOIN
products_desc
ON
products_desc.id = products[s].coll[/s] .id
WHERE
products.id='.$prodID.'
/r Gahh!! Det var bara ett slarvfel (se ovan). Jag bjuder på det idag.
Web-TorMedlem sedan nov. 200013 890 inlägg Ajdå. Om kolumnen "products.coll" är NULL så resulterar inte frågan något. Att den inte hämtar nåt från "collections_desc" är ju riktigt men jag vill ju fortfarande ha fram allt ur "products" och "products_desc". Hur löser man det tro?
SELECT
*
FROM
products
LEFT JOIN
collections_desc
ON
collections_desc.id = products.coll
LEFT JOIN
products_desc
ON
products_desc.id = products.id
WHERE
products.id='.$prodID.'
/r Nu inser jag att det beror på att WHERE igentligen ser ut så här (jag hämtar rätt språk):
WHERE
products.id='.$prodID.' AND collections_desc.lang = "'.$_SESSION['lang'].'" AND products_desc.lang = "'.$_SESSION['lang'].'"')
Och om "coll" är NULL så finns det ju inte något "lang" att hämta...
Hur gör jag för att bara hämta "collections_desc.lang" ifall "products.coll" <> NULL :q
Peter SMedlem sedan dec. 20025 483 inlägg SELECT
*
FROM
(products
INNER JOIN
products_desc
ON
products_desc.id = products.id)
LEFT JOIN
collections_desc
ON
collections_desc.id = products.coll AND
collections_desc.lang = "'.$_SESSION['lang'].'"
WHERE
products.id='.$prodID.' AND
products_desc.lang = "'.$_SESSION['lang'].'"
Web-TorMedlem sedan nov. 200013 890 inlägg Det är så vackert att jag nästan får en tår i ögat. :r