If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router
[ Voor 52% gewijzigd door Soultaker op 15-10-2004 22:54 ]
Je zou misschien eens met een COUNT aan de slag kunnen en dan kijken waar de COUNT 2 is; je groepeerd dan op p.photo_id en zet pc.category_id in je WHERE -statement.Soultaker schreef op 15 oktober 2004 @ 22:53:
Sorry, dit kan helaas niet handig met MySQL.
Afhankelijk van de MySQL kan je deze dan in een subquery stoppen.
Topictitle trouwens ook gedaan; "query" zegt weinig over je probleem.
[ Voor 20% gewijzigd door gorgi_19 op 15-10-2004 22:56 ]
Digitaal onderwijsmateriaal, leermateriaal voor hbo
1
| SELECT * FROM x WHERE x.cat = 1 AND x.id IN (SELECT id FROM x WHERE x.cat = 5) |
Maar ja, dat blijft toch een stuk minder mooi dan de code die je in de meeste DBMS'en kunt gebruiken:
1
2
3
| SELECT * FROM x WHERE x.cat = 1 INTERSECT SELECT * FROM x WHERE x.cat = 5 |
If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router
Je kan die code van Soultaker toch eenvoudig aanpassen?XLerator schreef op 15 oktober 2004 @ 23:01:
Hmm Soultaker: ik gaf maar een voorbeeld met 1 en 5. Je moet ook meerdere categorieën kunnen aangeven
Digitaal onderwijsmateriaal, leermateriaal voor hbo
1
2
3
4
5
6
7
8
| SELECT * FROM ria_photo_cat pc WHERE pc.category_id = 1 AND pc.category_id IN (SELECT category_id FROM ria_photo_cat pc WHERE pc.category_id = 5) |
Zo? Doet ie niet
edit
hmm zo kan ik in php er wel uitkomen. Bedankt voor de opzet!
1
2
3
4
5
6
7
| SELECT DISTINCT p.*, COUNT(pc.category_id) FROM ria_photo_cat pc, ria_photos p WHERE pc.photo_id = p.photo_id AND pc.category_id IN (1,5) GROUP BY pc.photo_id |
[ Voor 56% gewijzigd door Guillome op 15-10-2004 23:18 ]
If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router
1
2
3
4
5
6
7
8
9
10
11
12
| SELECT DISTINCT p.* FROM ria_photo_cat pc, ria_photos p WHERE pc.photo_id = p.photo_id AND pc.category_id IN (1,5,7,13) GROUP BY pc.photo_id HAVING COUNT(pc.category_id) = 4 |
De 4 in de HAVING-clause komt overeen met het aantal elementen in de WHERE-clause. Het idee is dat je alle gevonden rijen groepeert op photo_id, en alleen de groepen waarin alle categorien vertegenwoordigd zijn, worden opgeleverd.
Mysql kent UNION, daarmee kun je query's combineren in een resultset, lees ik opXLerator schreef op 15 oktober 2004 @ 23:04:
nouja mysql kent geen intersect en over die subquery:
http://dev.mysql.com/doc/mysql/en/UNION.html
[ Voor 3% gewijzigd door djantje op 16-10-2004 18:21 ]