27. juni 2011 - 13:02Der er
7 kommentarer og 1 løsning
Avanceret LEFT JOIN
Hej Eksperter
Har denne sql hvor jeg roder lidt med at udvide med endnu en LEFT JOIN, er bare ikke helt klar over hvordan jeg gør det rigtigt!
SELECT stock.*, stock_has_text.*, stock_groups.id FROM (stock LEFT JOIN stock_has_text ON stock_has_text.sid = stock.sid) LEFT JOIN stock_groups ON stock_groups.id = stock.stock_group_id WHERE stock.online='1' AND stock.stock_group_id=".$this->db->escape($gid)." AND stock_has_text.lid=".$this->db->escape($lid)."");
Det jeg gerne vil er at LEFT JOINE følgende "online.* WHERE web='webpage'"
Håber det er nok til at give et overblik over hvad det er jeg vil.
SELECT stock.*, stock_has_text.*, stock_groups.id FROM (stock LEFT JOIN stock_has_text ON stock_has_text.sid = stock.sid) LEFT JOIN stock_groups ON stock_groups.id = stock.stock_group_id LEFT JOIN online ON et_eller_andet = niget_andet WHERE stock.online='1' AND stock.stock_group_id=".$this->db->escape($gid)." AND stock_has_text.lid=".$this->db->escape($lid).""); AND web="webpage"
Følgende virker, men er det den "rigtige" fremgangsmåde?
SELECT stock.*, stock_has_text.*, stock_groups.id, stock_groups_has_websites.website_id FROM (stock LEFT JOIN stock_has_text ON stock_has_text.sid = stock.sid) LEFT JOIN stock_groups ON stock_groups.id = stock.stock_group_id LEFT JOIN stock_groups_has_websites ON stock_groups_has_websites.id = stock.stock_group_id WHERE stock.online='1' AND stock.stock_group_id=".$this->db->escape($gid)." AND stock_has_text.lid=".$this->db->escape($lid)." AND stock_groups_has_websites.website_id='".$this->db->escape($wid)."'
Relationen er mellem stock_groups_has_websites.id = stock.stock_group_id
Det er nok sådan jeg selv ville have gjort det. (Men så ville jeg nok have brugt aliaser (øgenavne) til tabellerne for at gøre det lidt mere oversigtelig:
SELECT s.*, t.*, g.id, w.website_id FROM stock s LEFT JOIN stoch_has_text t ON t.sid = s.sid LEFT JOIN stock_groups g ON g.id = s.stock_group_id LEFT JOIN stock_groups_has_websites w ON w.id = s.stock_group_id WHERE s.online = '1' AND s.stock_stock_group_id ..... o.s.v.
Men hvis tabellerne stock_groups og stock_groups_has_websites begge relaterer til tabellen stock på stock.stock_group_id, så tør jeg vædde på, at du kan slå de to tabeller sammen, således at du får en mere enkel struktur i din database og sparer en LEFT JOIN i denne og måske andre queries.
Tabellen stock_groups_has_websites relatere til stock_groups på stock_group_id, dog bestemmer visningssiden om resultatet skal med stock_groups_has_websites.website_id
Med andre ord. Der kan være flere rækker i stock_groups_has_websites til hver række i stock_groups.
Måske en kringlet forklaring. :-)
Venligst smid nogle svar martiinkolle og Christian_Belgien så kan jeg få lukket igen.
groyk, du fik kun det ene svar. Hvis du alligevel gerne vil dele points, kunne du jo selv lægge et svar og acceptere det sammen med mit. Så er der ryddet op og spørgsmålet lukket, og hvis #1 senere kommer ind, har du points til at oprette et spørgsmål "points til ...".
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.