[php/mysql] Negeert een '!=' operator

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een hele dikke SQL statement waaruit hij 1 ding negeert
Namelijk:

AND t1.type != '2'

Wat hij doet, hij negeert als reactie hierop alles welke waarde het ook heeft. Dus hij
lijkt het te intepeteren als AND t1.type = '2'

De deze NIET lijkt hij niet te willen snappen.
Dit is de volledige sql statement:

$sql = "SELECT t1.idprofile, t1.type, t1.nlgb, t1.isEnglish, t2.company_name, t2.ID FROM ";
$sql .= "users AS t1, mm AS t2 ";
$sql .= "WHERE t2.ID = t1.idprofile AND t1.nlgb = '1' AND t1.isEnglish <> '1' AND t1.type != '2'" ;

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
waarom daar ook niet <> gebruiken dan?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
negeert hij net zo goed
is toch synoniem?

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
eigenlijk wel, maar misschien maakte het verschil.
Welke MySQL versie gaat het om?

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Is het misschien omdat de waardes in de database NULL zijn als ze niet 2 zijn?

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
NULL waardes moet je inderdaad expliciet opvragen..

... AND (r1.type != 2 OR r1.type IS NULL)

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
4.1.21-standard

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Had wat fout gezegd. De symptomen zijn als volgt:

Hij laat de waardes die inderdaad NIET twee zijn. (die hij dus zou moeten laten zien). Laat hij
niet zien. De waardes in de database van die entries zijn NULL. Misschien kan je daar geen != oplos laten?

Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
je kan niet vergelijken met NULL values als je de NULL values erbij wilt hebben moet je dat dus ook echt in je query vermelden (zie mijn vorige reactie), en andere work-a-round is om dat veld een default te geven van '0' ofzo, dan werkt je != statement wel.

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Werkt als een aap. Dankjewel!

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 00:27

.oisyn

Moderator Devschuur®

Demotivational Speaker

SWINX schreef op woensdag 28 februari 2007 @ 00:34:
en andere work-a-round is om dat veld een default te geven van '0' ofzo, dan werkt je != statement wel.
Een slechte workaround bovendien. NULL staat voor ongedefiniëerd, en werkt ook prima zo volgens de tristate logica. "ongedefinieerd == 1" is ongedefinieerd, want 'ongedefinieerd' kan immers alles zijn. Als het 1 is is die expressie true, maar als het een andere waarde heeft is het false. Daarom is de uitkomst ook ongedefinieerd. Bij operatoren zoals AND en OR, echter, hoeft de uitkomst niet ongedefinieerd te zijn - "ongedefinieerd AND false" is altijd false net als dat "ongedefinieerd OR true" altijd true is.

Door een 0 in je database te zetten definieer je een waarde, terwijl je juist bedoelt dat het ongedefinieerd moet zijn. Gebruik dus altijd NULL voor ongedefinieerde dingen (zoals niet ingevulde velden), en gebruik NULL ook alleen maar daarvoor.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • SWINX
  • Registratie: Juni 2001
  • Laatst online: 23-07 18:19
(jarig!)
inderdaad slecht om 0 te gebruiken als je NULL bedoeld, maar ik bedoelde een onderscheid aan te geven tussen 0 en NULL, dat je bij 0 wel != mag/kunt gebruiken en bij NULL niet.

Wellicht een beetje krom door mij verwoord, uiteraard gebruik je normaal NULL voor een leeg (ongedefinieerd) veld.

Mannen komen van Mars Tweakers, vrouwen van Venus Bokt

Pagina: 1