2011-09-09 4 views
1

Je suis en train de faire un moteur de recherche et ce que je veux, c'est de sélectionner des lignes qui sont différentes pour deux colonnes.en utilisant "ET" déclaration avec "SELECT DISTINCT"

$sorgu = mysql_query("SELECT DISTINCT name AND surname FROM users"); 

    while($cek = mysql_fetch_array($sorgu)) 
    { 
     $display = $cek['name']." ".$cek['surname']; 

     if(strcmp($written,$display) == 0) 
     { 
      echo $display; 
     }  
    } 

Je reçois erreur Undefined index pour les deux d'entre eux, le nom et surname.When i supprimer "ET" déclaration ici, le code fonctionne très bien. Comment puis-je utiliser "ET" ici, ce qui signifie la comparaison de deux colonnes en même temps? Merci

+0

Qu'est-ce que ça veut dire? Est-ce que le nom et le prénom sont supposés être différents les uns des autres? Ou la combinaison nom + nom est-elle supposée unique? Ou s'agit-il d'autre chose? – NullUserException

+2

utilisez GROUP BY au lieu de DISTINCT pour plus de 1 champ; Changez-le en ID DISTINCT; –

+0

nom + nom supposé unique – user893970

Répondre

2

Si vous essayez de tirer un DISTINCT nom et prénom, il devrait être

SELECT DISTINCT Name, Surname 
FROM Users 

GROUP BY Name, Surname

Cela vous donnera des résultats tels que:

Name | Surname 
------------------ 
    John | Smith 
    John | Doe 
    Doug | Smith 

Il empêche les résultats comme:

Name | Surname 
------------------ 
    John | Smith 
    John | Doe 
    John | Smith 
+1

+1, en effet. Je crois que DISTINCT s'applique à tout dans l'instruction SELECT lorsque vous l'utilisez. – jadarnel27

+1

C'est exact, si vous vouliez un 'DISTINCT Name' et un' DISTINCT Name', alors vous auriez besoin d'utiliser une sous-requête pour accomplir ceci. – jon3laze

+2

GROUP BY n'est pas nécessaire si le DISTINCT a été appliqué – ajreal

0

Utilisez GROUP BY au lieu de DISTINCT pour plus de 1 champ; Changez-le en ID DISTINCT;

changement

$sorgu = mysql_query("SELECT DISTINCT name AND surname FROM users"); 

à

$sorgu = mysql_query("SELECT name, surname FROM users GROUP BY name, surname"); 
0

Dans la plupart des bases de données une DISTINCT (ou UNIQUE) est équivalent à un GROUP BY ... ORDER BY, alors que GROUP BY par lui-même est un

non ordonnée DISTINCT

Ce:

  • SELECT DISTINCT name, surname 
    FROM users 
    

devrait être équivalent à:

  • SELECT name, surname 
    FROM  users 
    GROUP BY name, surname 
    ORDER BY name, surname 
    

est similaire à:

  • SELECT name, surname 
    FROM  users 
    GROUP BY name, surname 
    

Tout ce qui devrait vous donner un ensemble unique d'enregistrements, mais le dernier devrait donner le résultat le plus rapide.

En outre, isntead de concaténer dans le code, vous pouvez aussi le faire dans la base de données:

  • SELECT DISTINCT concat(name,' ',surname) 
    FROM users