Bepaalde gegevens uitsluiten bij ophalen in SQL php
Ik heb deze query:
Code (php)
1
2
3
4
2
3
4
<?php
$q = 'SELECT id_category FROM ps_category_product WHERE id_category != 2903 OR id_category != 2904 OR id_category != 2905 OR id_category != 2635 ';
?>
$q = 'SELECT id_category FROM ps_category_product WHERE id_category != 2903 OR id_category != 2904 OR id_category != 2905 OR id_category != 2635 ';
?>
Nu wil i kdus alles ophalen BEHALVE de categorie ids: 2903-2904-2905 en 2635... helaas haalt die alles op dus ook deze ids, wat gaat er mis?
AND wanneer aan ALLE voorwaarden wordt voldaan.
OR wanneer aan EEN van de voorwaarde wordt voldaan.
werkt, bedankt!
Uiteraard zou je ook iets met NOT IN(id1, id2, id3) kunnen doen.
Gewijzigd op 15/02/2017 15:38:00 door Ben van Velzen
- in zekere zin is het verstandig om zoveel mogelijk "hardcoding" uit de weg te gaan, in je query staan specifieke id's; wie zegt dat deze over tijd altijd gelijk blijven? en zoniet zou dit elke keer een handmatige wijziging van de query inhouden
- je definieert hier uitzonderingen, dus deze constructie is een soort van blacklist; meestal is het gebruik van een blacklist niet aan te raden omdat je dan alle gevallen moet definiëren die niet aan bepaalde condities voldoen terwijl je eigenlijk liever enkel resultaten wilt hebben die wél voldoen (whitelist); vergeet je namelijk een geval bij de blacklist-aanpak dat kan dit (in het ergste geval) het verschil betekenen tussen een veilige of onveilige applicatie; uiteraard spelen ook praktische overwegingen, zoals welke lijst korter is :p
Los hiervan, blijkbaar is er iets speciaals aan de hand met deze categorie-id's. Deze wil je om een of andere reden niet selecteren / tonen. Dit zou je ook tot uiting kunnen laten komen door een attribuut aan de categorie(_product) tabel toe te voegen. Denk bijvoorbeeld aan een boolean veld "actief" ofzo, dan kun je de actieve categorieën selecteren met WHERE ... actief = 1. Een ander voordeel van deze aanpak is dat je dit veld in een beheerscherm van de categorieën op kunt nemen zodat je deze eigenschap alleen hier hoeft aan te passen en je niet de code in hoeft te duiken om een (of meer!) queries aan te passen.
Gewijzigd op 15/02/2017 19:25:31 door Thomas van den Heuvel