mysql - selectsats problem

Tråden skapades och har fått 9 svar. Det senaste inlägget skrevs .
1

I ett medlemsregister finns en kolumn för email-adresser. Eftersom inte alla medlemmar har mailadresser så har en del fält matats med ett 'x' och andra har av databasen fått värdet 'NULL'. Att bara filtrera bort 'NULL'-raderna går fint:

"SELECT  `email` 
FROM  `medlemmar` 
WHERE  `email` IS NOT NULL ORDER BY `email`"

Men hur tusan ska jag uttrycka mig för att även få bort rader med värdet 'x' (och för den delen 'X'). Så här kan man jallafall inte göra:

"SELECT  `email` 
FROM  `medlemmar` 
WHERE  `email` IS NOT NULL OR `email` IS NOT 'X'
ORDER BY `email`";

SELECT email FROM medlemmar WHERE email != 'X' OR email != '' OR email != 'x' ORDER BY email

Ursprungligen av Mattias Hedman:

SELECT email FROM medlemmar WHERE email != 'X' OR email != '' OR email != 'x' ORDER BY email

Tackar.... men ack nej. Så fort jag lägger in OR-satsen så slutar filtreringen å funka. Jag kör fresten phpMyAdmin 2.6.4-pl2 och MySQL 4.0.25-standard om det har någon betydelse i sammanhanget.

  • Oregistrerad
  • 2005-12-21 08:32

Det bör ju rimligen vara AND och inte OR eller?

  • Medlem
  • International user
  • 2005-12-21 10:23

Kan bara instamma och saega att det borde vara AND....tror jag

Om man byter ur OR mot AND så gör väl SELECT-satsen ett orhört snävt urval. Dvs den ska isåfall bara utesluta de poster vars 'email'-fält har både värdet NULL och x (vilket per defenition inte kan förekomma)

  • Medlem
  • 2005-12-21 10:36

Nej, den väljer de som har både har "EJ x" OCH "EJ X". Så det ska vara AND, men lägg till en AND NOT NULL också.

  • Medlem
  • International user
  • 2005-12-21 10:41

Hade inte det allra baesta varit att skriva ett litet skript i typ PHP och ta byta ut "x" och "X" etc mot ""?

Ursprungligen av kashiwagi:

Hade inte det allra baesta varit att skriva ett litet skript i typ PHP och ta byta ut "x" och "X" etc mot ""?

Ja så får det bli. Men istället för php-script fick det bli en handgriplighet direkt i sql

UPDATE  `medlemmar` SET `email` = NULL WHERE  `email` = 'x'

Även om problemet redan är löst så bidrar jag med ännu ett förslag:

SELECT email FROM medlemmar WHERE email NOT IN (NULL, 'X','x')

1
Bevaka tråden