Bepaalde gegevens uitsluiten bij ophalen in SQL php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

15/02/2017 14:36:23
Quote Anchor link
Goedmeiddag,

Ik heb deze query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ';
?>


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?
 
PHP hulp

PHP hulp

24/04/2024 05:32:51
 
Adoptive Solution

Adoptive Solution

15/02/2017 14:47:21
Quote Anchor link
Probeer het eens met AND i.p.v. OR

AND wanneer aan ALLE voorwaarden wordt voldaan.
OR wanneer aan EEN van de voorwaarde wordt voldaan.
 
Furio Scripting

Furio Scripting

15/02/2017 15:05:06
Quote Anchor link
werkt, bedankt!
 
Ben van Velzen

Ben van Velzen

15/02/2017 15:37:22
Quote Anchor link
Kleine nitpick: In SQL is het <> en niet !=.
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
 
Thomas van den Heuvel

Thomas van den Heuvel

15/02/2017 19:24:41
Quote Anchor link
@Furio je neemt met deze aanpak wel een paar impliciete (ontwerp)beslissingen:
- 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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.