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?
C'est assez simple:
SELECT DISTINCT name FROM info WHERE status = 1 ORDER BY id
Le mot clé SQL DISTINCT
fait l'affaire.
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 BY
name
ou n_names
en fonction de vos besoins
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
ajoutez GROUP BY name
à votre instruction SQL - cela ne ramènera qu'une entrée de chaque entrée de la colonne name
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.
$ 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 } ?>
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>';
}
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++;
}