selectie aanpassen als IS NULL
ik ben bezig met een database voor cocktailrecepten. hierbij kan je een foto toevoegen, maar dat is niet verplicht. Nu wil ik de gegevens uit de tabel halen om ze weer te geven, maar dat lukt alleen als er een id is aangegeven voor de afbeelding (verwijst naar een andere tabel met afbeeldingen). mijn query ziet er nu zo uit
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
SELECT P.path, cocktailnaam, cocktailtype, glassname, username, C.description
FROM glassware G, cocktails C, users U, pictures P
WHERE C.cocktailid = 2
AND C.glassid = G.glassid
AND C.userid = U.userid
AND IF(C.pictureid IS NULL, P.path = 'default.png', C.pictureid = P.pictureid)
?>
SELECT P.path, cocktailnaam, cocktailtype, glassname, username, C.description
FROM glassware G, cocktails C, users U, pictures P
WHERE C.cocktailid = 2
AND C.glassid = G.glassid
AND C.userid = U.userid
AND IF(C.pictureid IS NULL, P.path = 'default.png', C.pictureid = P.pictureid)
?>
is het mogelijk om in het geval dat er gen id is, de kolom path te verklaren zodat ik kan doorverwijzen naar een lege afbeelding
edit: de 2, van cocktailid = 2 is in werkelijkheid variabel (php)
Gewijzigd op 16/04/2012 19:19:38 door Marijn Struijlaart
Let wel jouw joins zijn impliciet dus ALTIJD INNER JOINS
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
SELECT IF(C.pictureid IS NULL, 'default.png' ,path) AS path, cocktailnaam, cocktailtype, glassname, username, C.description
FROM glassware G, cocktails C, users U, pictures P
WHERE C.cocktailid = 1
AND C.glassid = G.glassid
AND C.userid = U.userid
AND (P.pictureid = C.pictureid OR C.pictureid IS NULL)
?>
SELECT IF(C.pictureid IS NULL, 'default.png' ,path) AS path, cocktailnaam, cocktailtype, glassname, username, C.description
FROM glassware G, cocktails C, users U, pictures P
WHERE C.cocktailid = 1
AND C.glassid = G.glassid
AND C.userid = U.userid
AND (P.pictureid = C.pictureid OR C.pictureid IS NULL)
?>
dit geeft de goede waarden in ieder geval
edit: geeft niet de goede waarden als er meerdere waarden voor pictureid in de tabel staan
edit2: laatste SQL regel toegevoegd, zorgt ervoor dat bij NOT NULL waarden er maar 1 waarde uitkomt. bij niet gedefinieerde geeft het nog wel meerdere.
Gewijzigd op 16/04/2012 19:37:28 door Marijn Struijlaart
Je opbouw van de tabellen is niet goed, als een coctail meerdere foto's kan hebben hoort de pictureid niet in die tabel, anders kan je gewoon het pad naar de foto in de cocktails tabel opnemen.
PS
Dit gaat over drank, dan ben ik extra alert :-P
Ik heb die tabel afgesplitst omdat ook de tabellen ingredients, garnering etc een afbeelding kunnen hebben. die heb ik allemaal gelinkt aan de tabel pictures zodat ik een AI kan gebruiken. ik kan dit trouwens ook heel simpel oplossen door LIMIT 0,1 toe te voegen omdat ik maar van 1 cocktail de gegevens nodig heb