Affichage 1 fois et non n fois

Eléphant du PHP | 440 Messages

01 juil. 2009, 08:42

Bonjour,

je cherche à améliorer une page. Ce bout de code
<?php echo $row['ville'] ?>
m'affiche les villes. Mais il affiche la ville autant de fois qu'elle apparaît dans la base. Si "Nice" figure 10 fois, j'aurais 10 lignes pour "Nice".

Comment faire pour que chaque ville n'apparaisse qu'une seule fois ?
Merci pour votre aide.
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1136 Messages

01 juil. 2009, 08:59

Salut ,

Regardes plutôt du coté de ta requête sql , soit par un GROUP BY ou DISTINCT selon le reste de ta requête .

Ch.

Eléphant du PHP | 440 Messages

01 juil. 2009, 09:20

Ma requête se présente ainsi
$sql = "SELECT *FROM {$tablename} ORDER BY {$order_by} {$order_dir}";
Elle devient
$sql = "SELECT * FROM {$tablename} GROUP BY ville ORDER BY {$order_by} {$order_dir} ";
Question subsidiaire : j'ai la même question pour les activités. Comment j'ajoute le champ activite à côté de ville dans ma requête ? J'ai essayé entre parenthèses mais ça ne marche pas.
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1136 Messages

01 juil. 2009, 09:30

Distinct s'utilise comme ceci par exemple :
select 
    distinct( utilisateurs.nom ),
    utilisateurs.prenom,
    utilisateurs.etat 
from 
    mabase.utilisateurs

Eléphant du PHP | 440 Messages

01 juil. 2009, 09:40

finalement avec GROUP BY ça fonctionne mais comment appliquer sur 2 valeurs ?
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1136 Messages

01 juil. 2009, 09:43

Comme ceci :

group by champ1, champ2 , champx

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

01 juil. 2009, 10:02

1. Éviter le SELECT * et préciser les champs souhaités (ville)
2. Dans cet exemple, le DISTINCT est plus optimisé que le GROUP BY
$sql = "SELECT ville FROM table GROUP BY ville";  // Correct, sans plus
$sql = "SELECT DISTINCT ville FROM table";        // Optimisé

Eléphant du PHP | 440 Messages

01 juil. 2009, 11:06

ok pour cette écriture
$sql = "SELECT DISTINCT ville FROM table";
mais quand j'ajoute un 2e DISTINCT ?

Si j'écris DISTINCT ville, activite, la page s'affiche mais sans tenir compte de ma requête.
Débutant complet en php/mysql. Merci pour votre aide.

Mammouth du PHP | 686 Messages

01 juil. 2009, 11:11

et comme ca ?
$sql = "SELECT DISTINCT 'ville', 'activite' FROM table"; 

Eléphant du PHP | 440 Messages

01 juil. 2009, 11:18

et comme ca ?
$sql = "SELECT DISTINCT 'ville', 'activite' FROM table"; 
Bien essayé ! Mais ça m'affiche "ville activite" :wink:
Débutant complet en php/mysql. Merci pour votre aide.

ViPHP
ViPHP | 1136 Messages

01 juil. 2009, 11:20

DINSTINCT fonctionne sur la ligne , pas sur une colonne ..

Il te faut donc utiliser à la fois DISTINCT pour le plus gros , et GROUP BY pour le reste ..

Apres il existe peut être d'autres façon de faire , mais n'étant pas un expert en SQL .. je ne les connais pas ..

Mammouth du PHP | 686 Messages

01 juil. 2009, 11:25

Sinon ba comme je dis ya toujours le plan demerde, certes pas optimisé ...
Deux requetes ...
$sql_ville = "SELECT DISTINCT ville FROM table";
$sql_activite = "SELECT DISTINCT activite FROM table";

Eléphant du PHP | 440 Messages

01 juil. 2009, 11:35

Sinon ba comme je dis ya toujours le plan demerde, certes pas optimisé ...
Deux requetes ...
$sql_ville = "SELECT DISTINCT ville FROM table";
$sql_activite = "SELECT DISTINCT activite FROM table";
ok. je fais comment pour regrouper ça dans une même requête ?
Débutant complet en php/mysql. Merci pour votre aide.

Eléphant du PHP | 141 Messages

01 juil. 2009, 11:35

Tout dépend aussi comment tu veut afficher les résultats.
Tu veux une liste unique des villes et une liste unique des activités ?
Ou tu veux conserver l'info de lien entre la ville et l'activité ?

Je suppose que deux villes peuvent être associés avec la même activité...

ViPHP
ViPHP | 1136 Messages

01 juil. 2009, 11:36

En fait je ne comprends pas pourquoi tu veux supprimer les doublons sur deux champs ?

En faisant ça , tu risques de passer à coté d'enregistrements qui sont pourtant diffèrent !

Ex :

1 ville => lille , activite => picole
2 ville => paris,activite => picole
3 ville => lille, activite => tourisme

Dans ces trois enregistrements , si tu supprimes les doublons sur la ville , seule l'enregistrement 1 et 2 seront retournés , puis si tu appliques un group by sur l'activité , tu n'auras au finale qu'une seul résultat !

Pourtant ils sont tous diffèrent !