wake-up-neo.net

Wählen Sie eine Zeile ohne doppelte Einträge aus

In MySQL-Tabelle info habe ich:

ID, Name, Stadt, Datum, Status

Ich möchte alle Namen aus "info" auswählen Die Abfrage durchführen

$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>';
}

Nun, das Ergebnis ist, dass alle Einträge zurückgegeben werden. Ich möchte alle Einträge ohne Duplikate wiederholen.

Sprich: unter rohem "name" haben wir 10 mal den Namen "John" eingefügt.
Ich möchte nur einmal ein Echo geben Ist das möglich?

15
Darius

Es ist ziemlich einfach:

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

Das SQL-Schlüsselwort DISTINCT führt den Trick aus.

36
Bohemian

versuchen Sie, dies als Ihre Abfrage zu verwenden:

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

unterschiedliche Namen bekommen

oder als andere vorgeschlagene Verwendung GROUP BY

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

Ich denke, der erste ist intuitiver und es gibt keinen großen Leistungsunterschied zwischen den beiden

EDIT

da das OP auch die Anzahl der Namen hier haben will, gehen wir:

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

sie können ORDER BYname oder n_names je nach Bedarf verwenden

14
Dalen

Veränderung 

SELECT name FROM info WHERE status = 1 ORDER BY id

zu 

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

Beachten Sie, dass GROUP BY hinzugefügt wurde. Weitere Informationen zur Gruppe finden Sie unter http://dev.mysql.com/doc/refman/5.0/de/group-by-hidden-columns.html

Bearbeiten:
für name mit anzahl der scheinungen versuchen 

SELECT Name, Anzahl (Name) FROM Info WHERE Status = 1 GROUP BY Name ORDER BY ID
6
cristian

fügen Sie GROUP BY name zu Ihrer SQL-Anweisung hinzu - dies bringt nur einen Eintrag aus der Namensspalte zurück

2
ManseUK

Nehmen wir an, Sie senden Massen-SMS und möchten dieselbe Nachricht nicht zweimal an denselben John senden. Was ich entdeckte, ist, dass der Trick von GROUP BY und ORDER BY gleichzeitig perfekt funktioniert. Aber ich sage nicht, dass dies der beste Weg ist. So können Sie es verwenden 

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

EDIT: Dies ist wichtig zu beachten: Wenn Sie mehr als eine einzelne Spalte benötigen und die Werte pro Zeile eindeutig sind, hat DISTINCT nicht geholfen.

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

benutzen GROUP BY Name Anweisung 

$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

Dies funktioniert für mich, gibt die Tabellennamen für eine bestimmte Datenbank zurück.

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