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
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 :)
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.
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 :)
WHERE color.color = 'Sort' AND stock.articleid IS NULL
Og den returnere slet ikke nogen rækker hvor articleid er NULL
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.