Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

    $recupere = $bdd->prepare('SELECT pseudo FROM poster_histoire');
    $recupere->execute();   

        while ($donnees = $recupere->fetch()) {

Ce que je veux

J'aimerais que même si un pseudo apparait plusieurs fois dans la table sql , il ne soit afficher qu'une seule fois dans mon site web.

Ce que j'obtiens

si par exemple j'ai une table:

PSEUDO | TITRE
bob | rg
charlie | fgythyhy
bob | trfr
robert | no_sé

Il ya plusieurs fois bob dedans
donc forcément mon code affiche plusieurs fois bob
comment éviter qu'il apparaisse plusieurs fois ?

5 réponses


Soundboy39
Réponse acceptée

"Warning: Illegal string offset 'pseudo' in... que je ne sais pas comment resoudre "

Oui je n'ai pas testé le code... le but était de te proposer une manière de faire.

C'est bien si tu a pu résoudre le problème, n'oubli pas de passer le poste à RESOLU.

Bonjour,

Il est possible de "dédoublonner" en SQL, avec un DISCTINCT, des GROUP BY, des sous-requêtes... etc.

Le plus simple étant de le faire en PHP avec un code du style :

$recupere = $bdd->prepare('SELECT pseudo FROM poster_histoire');
$recupere->execute();
$processed = array();  

foreach($recupere->fetch() as $poster_histoire) {

    if(!in_array($poster_histoire['pseudo'], $processed)) {

        // FAIRE CE QUE TU VEUX AVEC Le poster_histoire

        $processed[] = $poster_histoire['pseudo'];

    }

}
Deku
Auteur

Merci pour ta réponse.
Donc si je comprends bien la solution etait juste d'enregistrer dans un tableau les pseudos de la base si ils n'y sont pas deja puis de les afficher .

Mais j' ai un message d'erreur : Warning: Illegal string offset 'pseudo' in... que je ne sais pas comment resoudre

Deku
Auteur

c'est bon j'ai trouvé merci

Bonjour.
Il te suffit d'utiliser l'instruction DISTINCT dans ta requête SQL, ce qui te permettra de récupérer les résultat sans avoir de doublon dans ceux-ci, voir ici.
Mais si tu dois faire ça, c'est que tes tables sont mal structurées.