2010-07-20 17 views
37

Zastanawiam się, jakie polecenie mysql mógłbym wykonać w php, który wybrałby wszystkie elementy z pewnej tabeli, gdzie columna nie jest równa x, a kolumnab nie jest równa xWybierz z pola, które nie jest równe Mysql Php

Coś jak: select something from table where columna does not equal x and columnb does not equal x

jakieś pomysły?

Odpowiedz

60

Kluczem jest zapytanie SQL, które można skonfigurować jako ciąg:

$sqlquery = "SELECT field1, field2 FROM table WHERE NOT columnA = 'x' AND NOT columbB = 'y'"; 

Należy pamiętać, że istnieje wiele sposobów, aby nie określa. Jeszcze jeden, który działa tak samo dobrze jest:

$sqlquery = "SELECT field1, field2 FROM table WHERE columnA != 'x' AND columbB != 'y'"; 

Oto pełna przykładów, jak go używać:

$link = mysql_connect($dbHost,$dbUser,$dbPass) or die("Unable to connect to database"); 
mysql_select_db("$dbName") or die("Unable to select database $dbName"); 
$sqlquery = "SELECT field1, field2 FROM table WHERE NOT columnA = 'x' AND NOT columbB = 'y'"; 
$result=mysql_query($sqlquery); 

while ($row = mysql_fetch_assoc($result) { 
//do stuff 
} 

Możesz robić, co chcesz, we wskazanym powyżej pętli while. Uzyskaj dostęp do każdego pola tabeli jako elementu $row array, co oznacza, że ​​$row['field1'] poda wartość field1 w bieżącym wierszu, a $row['field2'] poda wartość field2.

Należy zauważyć, że jeśli kolumny (y) mogą mieć wartości NULL, nie zostaną znalezione przy użyciu którejkolwiek z powyższych składni. trzeba będzie dodać klauzule zawierać NULL wartości:

$sqlquery = "SELECT field1, field2 FROM table WHERE (NOT columnA = 'x' OR columnA IS NULL) AND (NOT columbB = 'y' OR columnB IS NULL)"; 
+4

Cieszę się, że mogę Ci pomóc. Zacząłem od bloku kodu jako przykładu ... potem edytowałem 10 razy, a oszczędzałem, aby pomyśleć "poczekaj, mogę dodać jeszcze jedną rzecz, aby było to o wiele jaśniejsze" –

+0

żadna z nich nie działa jeśli domyślna wartość kolumny to 'NULL' – SpYk3HH

+0

@ SpYk3HH Dobry punkt. Zajmę się tym. –

-1

Można użyć także

select * from tablename where column1 ='a' and column2!='b'; 

1
select * from table where fiels1 NOT LIKE 'x' AND field2 NOT LIKE 'y' 

// praca ta w przypadku nieczuły sposób

0
$sqlquery = "SELECT field1, field2 FROM table WHERE columnA <> 'x' AND columbB <> 'y'"; 

Proponuję użyć operatora diamentów (<>) na rzecz! =, Ponieważ pierwszy to poprawny SQL, a drugi to dodatek MySQL.

6

można używać jak

NOT columnA = 'x' 

Albo

columnA != 'x' 

Albo

columnA <> 'x' 

I jak zapytania Jeffly Piec jest na tym wartości null, nie trzeba pisać jak

(NOT columnA = 'x' OR columnA IS NULL) 

Można ułatwiają przez

Not columnA <=> 'x' 

< => jest Null Bezpieczne równa Operatora, który zawiera wyniki z wartościami nawet null.

0

Lub można również wstawić instrukcję w nawiasie.

SELECT * FROM tablename WHERE NOT (columnA = 'x')