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?
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.
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 BY
name
oder n_names
je nach Bedarf verwenden
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
fügen Sie GROUP BY name
zu Ihrer SQL-Anweisung hinzu - dies bringt nur einen Eintrag aus der Namensspalte zurück
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.
$ 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 } ?>
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>';
}
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++;
}