Avatar billede groyk Novice
27. juni 2011 - 13:02 Der 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.
Avatar billede martiinkolle Nybegynder
27. juni 2011 - 13:24 #1
Du kan vel bare gøre:


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"

Det burde virke.. :)
Avatar billede majbom Novice
27. juni 2011 - 13:36 #2
-> #1 - øh?

-> #0 - hvordan har tabellen "online" relation til den eller de tabel(ler) den skal joines med?
Avatar billede groyk Novice
27. juni 2011 - 13:56 #3
martinkolle

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
27. juni 2011 - 15:48 #4
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.
Avatar billede groyk Novice
28. juni 2011 - 09:51 #5
Hej Christian

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.
28. juni 2011 - 10:19 #6
svar fra mig.
01. juli 2011 - 13:48 #7
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 ...".
Avatar billede groyk Novice
04. juli 2011 - 22:58 #8
Har ferie, derfor den lange respons :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester