Avatar billede kokoko Nybegynder
08. august 2005 - 13:57 Der er 5 kommentarer

Problemer med double join

Jeg har problemer med følgende query. Jeg vil gerne have den til at returnere alle størrelser selvom de ikke er på lager. Det virker fint i phpMyAdmin, men når jeg bruger det i php, så får jeg kun de størrelser der er på lager. Hvad gør jeg galt?

SELECT sizes.name AS size, stock.count AS count
FROM types_sizes AS sizes
LEFT JOIN articles_stock AS stock ON sizes.id = stock.sizeid
LEFT JOIN articles_colors AS color ON stock.colorid = color.id
WHERE color.color = 'Sort' AND stock.articleid = 302
Avatar billede barklund Nybegynder
08. august 2005 - 14:20 #1
Du kan enten flytte betingelse fra din where op til din join:

SELECT sizes.name AS size, stock.count AS count
FROM types_sizes AS sizes
LEFT JOIN articles_stock AS stock ON sizes.id = stock.sizeid AND stock.articleid = 302
LEFT JOIN articles_colors AS color ON stock.colorid = color.id
WHERE color.color = 'Sort'

Eller tilføje, at den også kan være null:

SELECT sizes.name AS size, stock.count AS count
FROM types_sizes AS sizes
LEFT JOIN articles_stock AS stock ON sizes.id = stock.sizeid
LEFT JOIN articles_colors AS color ON stock.colorid = color.id
WHERE color.color = 'Sort' AND (stock.articleid = 302 OR stock.articleid IS NULL)

Når du kræver, at stock.articleid _skal_ være 302, så skal den jo tilstede i tabellen - og dermed skal den være på lager :)

--
Morten Barklund
Avatar billede kokoko Nybegynder
08. august 2005 - 14:46 #2
Tak for dit svar.

Din løsning lyder meget logisk, men virker desværre ikke. Som min egen løsning ser det fint ud i phpMyAdmin, men i php returnere den kun dem der er på lager. Den er også utrolig langsom. Hvad der før tog et par sekunder tager nu over 30 sekunder og derfor bliver scriptet stoppet.
Avatar billede barklund Nybegynder
08. august 2005 - 14:49 #3
Du har vel lavet indekser på de felter, som bliver joinet sammen og/eller slået op under? Ellers har databaseserveren jo ikke en chance for at gøre det hurtigere :)
Avatar billede kokoko Nybegynder
08. august 2005 - 14:54 #4
Ja det kunne godt være det ville hjælpe på hastigheden :)

Men det virker jo stadigvæk ikke. Den returnere stadigvæk kun de størrelser der er på lager.
Avatar billede kokoko Nybegynder
08. august 2005 - 15:01 #5
Jeg prøvede lige at kører queryen med følgende:

WHERE color.color = 'Sort' AND stock.articleid IS NULL

Og den returnere slet ikke nogen rækker hvor articleid er NULL
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