2010-02-16 4 views
2

j'ai le code suivant:aide requête SQL avec des parenthèses

SELECT * 
FROM table 
WHERE thread = $thread 
AND (user != $user1 OR user != $user2) 

Je veux que le code pour récupérer toutes les lignes qui contient fil de $, mais l'utilisateur ne user1 $ ou user2 $.

est mon code correct? ou doit-il être comme:

SELECT * 
FROM table 
WHERE thread = $thread 
(AND user != $user1 OR user != $user2) 

merci à l'avance

Répondre

1

Utilisez ceci:

SELECT * 
FROM table 
WHERE thread = $thread 
(AND user != $user1 AND user != $user2) 

Parce que vous ne voulez pas si l'utilisateur est l'une des user1 ou user2, pour cette raison en utilisant 'ET' sera l'option appropriée ici.

Aussi, si le $thread n'est pas un champ entier, vous devez le placer entre guillemets, par exemple:

WHERE thread = '$thread' 
2

SELECT *
FROM table
WHERE thread = $thread
AND user != $user1
AND user != $user2

+0

et si le fil est une chaîne? – Sarfraz

+0

Juste après l'avance de l'OP. Eviter l'injection SQL est important, évidemment. – Plynx

0

Je pense que vous devriez aussi utiliser <> au lieu de =

Ainsi:

SELECT * 
FROM table 
WHERE thread = $thread 
AND user <> $user1 
AND user <> $user2 
+0

<> et! = Les deux sont identiques et compris par mysql – Sarfraz

+0

'! =' Est ANSI-92, et pris en charge par MySQL au moins 4.1+ –

3

Utilisation:

SELECT t.* 
    FROM TABLE t 
WHERE t.thread = mysql_real_escape_string($thread) 
    AND t.user NOT IN (mysql_real_escape_string($user1), mysql_real_escape_string($user2)) 

S'il vous plaît use mysql_real_escape_string ou risque SQL injection attacks.

+0

Notez que vous n'avez pas besoin de guillemets simples, à cause de l'utilisation de 'mysql_real_escape_string' –

+1

i leur a déjà échappé =) – ajsie

+0

'mysql_escape_string' est obsolète, mais une alternative pour PHP avant 5.3: http://php.net/manual/en/function.mysql-escape-string.php –

1

Vous pouvez également utiliser

SELECT * 
FROM table 
WHERE thread = '$thread' 
AND user NOT IN ($user1, $user2) 

Je ne sais pas qui exécute plus vite, mais c'est ma façon préférée parce que je l'aime est une meilleure lisibilité.