web-dev-qa-db-fra.com

Sélectionnez une ligne sans doublons

Dans la table mysql info j'ai:

Id, nom, ville, date, statut

Je veux sélectionner tous les noms dans "info" Faire la requête

$query = mysql_query("SELECT name FROM info WHERE status = 1 ORDER BY id") 
         or die(mysql_error());

while ($raw = mysql_fetch_array($query)) 
{
  $name = $raw["name"];
  echo ''.$name.'<br>';
}

Eh bien, le résultat est que toutes les entrées sont renvoyées ..__ Je veux répéter toutes les entrées sans les dupliquer.

En disant: sous "nom" brut, nous avons inséré le nom "John" 10 fois.
Je veux faire écho une seule fois . Est-ce possible?

15
Darius

C'est assez simple:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id

Le mot clé SQL DISTINCT fait l'affaire.

36
Bohemian

essayez d'utiliser ceci comme votre requête:

SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id

obtenir des noms distincts

ou comme autre utilisation suggérée GROUP BY

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

Je pense que le premier est plus intuitif et il n'y a pas de grande différence de performance entre les deux

MODIFIER

comme le PO veut aussi le nombre de noms, on va:

SELECT name,COUNT(id) AS n_names
FROM info WHERE status = 1
GROUP BY name
ORDER BY name

vous pouvez ORDER BYname ou n_names en fonction de vos besoins

14
Dalen

Changement 

SELECT name FROM info WHERE status = 1 ORDER BY id

à 

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id

Observez que GROUP BY a été ajouté. En savoir plus sur group by http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

Modifier:
pour le nom avec le nombre d'apparences essayez 

SELECT nom, nombre (nom) FROM info WHERE statut = 1 GROUP BY nom ORDER BY id
6
cristian

ajoutez GROUP BY name à votre instruction SQL - cela ne ramènera qu'une entrée de chaque entrée de la colonne name

2
ManseUK

Disons que vous envoyez des SMS en masse et que vous ne voulez pas envoyer le même message deux fois au même gars, John. Ce que j’ai découvert, c’est que l’utilisation du truc de GROUP BY et ORDER BY en même temps fonctionne parfaitement. Mais je ne dis pas que c'est la meilleure façon. Voici comment vous pouvez l'utiliser 

SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY name

EDIT: Il est important de noter que, lorsque vous avez besoin de plus d'une colonne et que les valeurs sont uniques par ligne, DISTINCT n'aide pas.

1
Humphrey

$ sql = "SELECT DISTINCT name FROM status = 1 GROUP BY name ORDER BY name";

$query = mysqli_query($conn,$sql);
<?php while ( $fire=mysqli_fetch_array($query)) { ?>
<h4><?php echo $query['name']; ?><br></h4>
<?php } ?>
0
Laud Randy Amofah

utilisation GROUP BY name Statement 

$query = mysql_query("SELECT name FROM info WHERE status = 1 GROUP BY name ORDER BY id") or      die(mysql_error());

while ($raw = mysql_fetch_array($query)) {
                $name = $raw["name"];
                echo ''.$name.'<br>';
                }
0
SergeS

Cela fonctionne pour moi, renvoie les noms de table pour une base de données donnée.

my $sql="select distinct table_name from COLUMNS  where table_schema='$database'"
my $sth = $dbht->prepare( $sql )
      or die "Cannot prepare SQL statement: $DBI::errstr\n";
  $sth->execute
      or die "Cannot execute SQL statement: $DBI::errstr\n";

  if ($DBI::err){

    $msg= "Data fetching terminated early by error: $DBI::errstr";

}


while (@col=$sth->fetchrow_array()){
    $table[$i]=$col[0];
    $i++;
}       
0
Darkpore