trin2_sql = "SELECT a.id AS vareid, a.pris, a.vejl_pris, a.typen, b.navn AS varenavn, b.url AS vareurl, d.id AS gruppeid, e.url AS gruppeurl,e.beskrivelse,e.navn AS gruppenavn,e.meta_titel,e.meta_nogleord,e.meta_beskrivelse, f.billede"
trin2_sql = trin2_sql & " FROM kat_vare a, kat_vare_indh b, kat_vare_placering c, kat_varegrp d, kat_varegrp_indh e, kat_billede f"
trin2_sql = trin2_sql & " WHERE b.vare_id=a.id AND b.sprog_id="&sprogid&" AND b.online=1 AND a.online=1 AND a.id=c.v_id AND d.id=e.grp_id AND d.butik_id=1 AND e.sprog_id="&sprogid&" AND e.online=1 AND d.id=c.g_id AND f.vare_id=a.id AND f.rakkefolge=1 AND e.grp_id="&gruppeid&""
Problemet ligger i at den kun henter ting ud hvis billede og varer er der.
Det der helst skal ske er at den skal til enhver tid skrive e.beskrivelse ud, og hvis der er varer så skal den skrive varer ud, og hvis der er et billede skal der puttet et billede på. Hvis der ikke er et billede til varen så skal der et intetbillede på.
Det jeg tror skal ske er at alt skal joines på en måde så det kan lade sig gi, men efter mange timers forsøg er det ikke lykkedes mig endnu.
Håber en kan hjælpe, og hvis i ikke forstår spørgsmålet så bare spørg løs.
Det er fordi du ikke bruger "rigtig" join. Der kan man nemlig angive om det skal være left join. Den metode du bruge kræver nemlig at data eksistere hele vejen igennem.
FROM kat_vare a left join kat_vare_indh b on b.vare_id=a.id left join kat_vare_placering c on a.id=c.v_id left join kat_varegrp d on d.id=c.g_id left join kat_varegrp_indh e on d.id=e.grp_id left join kat_billede f on f.vare_id=a.id
Det er lidt mere omstændigt da man skal joine i rigtig rækkefølge. Samtidig må man ikke specificere left join'ede tabeller på where klausulen uden en NULL angivelse, da de ellers vil opføre sig som en inner join.
Du skal derfor også have rette alle dine x.online=1 til: ..AND (f.rakkefolge=1 or f.rakkefolge is NULL) and (e.online=1 or e.online is NULL)
Bemærk parenteser om OR delen. De er vigtige da AND er vigtigere end OR, og selecten ellers vil blive opfattet forkert.
Kender du ikke til denne type join bliver vi nok nød til at lave et mere simpel eksempel med 2-3 tabeller, da din eksisterende SQL har mange tabeller og mange betingelser og derfor er ret kompleks.
Yes, var også selv ude i en masse left joins, men fik det ikke helt til at lykkedes. Jeg prøver at gå i krig igen imorgen med dit nye input, så der får du at vide om det lykkedes eller ej:Z
Fennec tak for dit input, det lykkedes mig at få den til at gå op.
Må jeg være så fræk at spørge om en ting mere?
her er sql'en ----------------------------------------------------------------------
sql_forside = sql_forside & "SELECT d.id AS vareid, d.pris, d.vejl_pris, d.typen, e.navn, e.url AS vareurl" sql_forside = sql_forside & ", a.id AS gruppeid,b.url AS gruppeurl,f.billede" sql_forside = sql_forside & " FROM kat_varegrp a" sql_forside = sql_forside & " INNER JOIN kat_varegrp_indh b ON a.id=b.grp_id AND b.online=1 AND b.sprog_id="&sprogid sql_forside = sql_forside & " INNER JOIN kat_vare_placering c ON a.id=c.g_id" sql_forside = sql_forside & " INNER JOIN kat_vare d ON d.id=c.v_id AND d.online=1" sql_forside = sql_forside & " INNER JOIN kat_vare_indh e ON e.vare_id=d.id AND e.online=1 AND e.sprog_id="&sprogid sql_forside = sql_forside & " LEFT JOIN kat_billede f ON f.vare_id=d.id AND f.rakkefolge=1"
sql_forside = sql_forside & " WHERE a.butik_id="&butikid&" AND a.id="&forside_tilbud_id
sql_forside = sql_forside &" ORDER BY c.rakkefolge"
Dette virker som det skal med en undtagelse. Hvordan vil du foreslå at gøre således at der kun kan være en af samme slags vare(d.id) i listen?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.