Bonjour à tous,

Je voudrais savoir comment peut on faire pour afficher une seule fois une donnée si elle existe dans la bdd par la fonction PHP fetch();

Mon code :
<?php
$annee = $_GET['year'];
$aff_formation = $bdd->prepare('SELECT * FROM datas WHERE year = '.$annee);
$request->execute(array($annee));
?>

Puis;

<?php while ($re = $request->fetch()) {
$re['name];
} ?>

Ex : Voici ma bdd :
NAME BDD = datas

+---------NAME---------+|+-----------AGE----------+|
JOHN | 18 |
+---------------------------+|+---------------------------+|
LOUIS |16 |
+---------------------------+|+---------------------------+|
LOUIS |15 |
+---------------------------+|+---------------------------+|

-->Le truc est que je voudrais afficher une seule fois, valable pour la collone "NAME", l'afficher qu'une fois le nom si il existe déjà dans la base.
J'espère m'avoir été compris.

Je vous remercie ! ;)

24 réponses


BaBeuloula
Réponse acceptée
SELECT * FROM datas WHERE year = 2018 GROUP BY name
BaBeuloula
Réponse acceptée

Ton SUM il faut lui dire comment tu veux l'appeler. Avant de tester en live, teste sur PHPMyAdmin ou autre, tu auras bien mieux les infos.

SELECT *, sum(nbr_top) AS ma_super_somme FROM datas WHERE name = ? AND id_user = ?
Huggy
Réponse acceptée

En théorie tu ne peux afficher que les colonnes sur lesquelles tu regroupes, donc pas d'étoile

SELECT NAME, SUM(nbr_top) AS ma_super_somme FROM datas WHERE NAME=? AND ID_USER=? GROUP BY NAME

je dis "en théorie" car MySQL renverra quand même les colonnes supplémentaires mais avec des valeurs prises au hazard des lignes rencontrées.

Salut,

Tu as connais le GROUP BY ? Si ce n'est pas le cas, je pense que cela peut sans doute te convenir.

Agafra
Auteur

Bonjour,

Merci de ta réponse si rapide !!
Je connais vaguement cette fonction mais je ne sais pas trop comment l'appliquer dans mon code... malgrès la doc que tu m'as fournis :D

Agafra
Auteur

Pour faire le total des valeurs d'une autre collone SQL d'un utilisateur, faut-il utilisater la fonction php SUM(), d'après la doc ?
Si oui comment peut-on l'employer pour additionner toutes les valeurs pour chaque utilisateur.

Merci encore !

Tu veux faire quoi concraitement ? Car j'ai du mal à te suivre là

Agafra
Auteur

En plus du code que vous m'avez gentillement fournit, je souhaite en plus de cela que chaque utilisateur aie le total des topics publiés... Merci

OK mais là tu ne parles pas de topic, tu récupères un nom et un age.

Tu peux nous donner plus d'infos sur ta base et ta table ? Car sans infos c'est un peu conplexe.

Sinon, de ce que je pense, il faudrait faire des requêtes avec des jointures.

Agafra
Auteur

Je refais le schémas de ma table entière :

NAME BDD = datas

+---------NAME---------+|+-----------AGE----------+|+-------nbr_top---------+|+-------annee---------+|
JOHN | 18 | 5 | 2017
+---------------------------+|+---------------------------+|+---------------------------+|+-------------------------+|
LOUIS | 16 | 8 | 2017
+---------------------------+|+---------------------------+|+---------------------------+|+-------------------------+|
LOUIS | 15 | 1 | 2018
+---------------------------+|+---------------------------+|+---------------------------+|+-------------------------+|

En résumé, je voudrais que Louis (on voit deux fois le même nom mais pas la même année), je voudrais faire
8(ann=2017) + 1(ann=2018) = 9-->le total des deux années.

Merci de ton aide ;)

Agafra
Auteur

Tu comprends mon problème ?

Salut, désolé de repondre un peu tard mais à chaque message que je voulais poster de mon téléphone j'avais une erreur 500 ><

Du coup, ce que je ferai dans ce cas, c'est je récupère tout sans le group by, je parcours les données et je stock dans un nouveau tableau avec en clé un identifiant unique (l'autoincrément ou alors ton NAME mais c'est pas trop unique), et en valeur les données de la BDD ainsi qu'une nouvelle entrée où j'aurai le nombre de posts. Il te suffit juste de tester si la clé existe ou non dans ton tableau et si oui, tu incrémentes le nombre, sinon tu crées la valeur dans ton tableau.

Tu comprends ? Je ne te donne volontairement pas de code pour que tu cherches un peu

Agafra
Auteur

Salut, merci de ta réponse !
Hier, toute la soirée jusqu'à peut près minuit, j'ai pas arrêté de cherché... je galère toujours...

J'avais pensé à utiliser la fonction sum() du genre :
(J'avais oublié de mettre l'id de l'user dans la bdd ;)

$req = $bdd->prepare('SELECT * sum(nbr_top) FROM datas WHERE name = ? AND id_user = ?)';
$req->execute(array($_SESSION[''name],$_SESSION['id']));

Rien à faire ca n'affiche rien...

Agafra
Auteur

Je teste ça et je te dis quoi :=) Merci

Agafra
Auteur

Ca marcheeeeeeeeeeeeeeeeeeee ! Merci beaoucoup vous êtes les meilleurs !!!!!

tu peux remercier @Babeuloula qui t'avais fourni toutes les infos

Salut, bon tant mieux si cela fonctionne. Et si jamais tu as d'autres soucis, hésite pas à expliciter du début ce que tu souhaites faire, ça permettra d'être plus compréhensible ^_^

Agafra
Auteur

Et oui aussi un dernier truc, comment fait on pour calculer quelque chose avec des virgules du genre :
1+3+0,5 = normalement 4,5 mais php me renvoie que 4

Merci !

PHP ou MySQL ? Car en PHP si tu fais bien un calcule avec des nombres et pas des chaines de caractères c'est bon. Vérifie bien que les typages. Si tu fais une addition sur une chaine de caractères il peut te retourner le nombre de caratères que contient la chaine

Agafra
Auteur

En PHP; bh j'ai simplement la collonne à calculer mais contient parfois des nombres à virgule (surtout 0,5)... Oui j'ai pensé la même chose que toi, c'est bizzare...

Au pire, tu peux les convertir en float avec la fonciton floatval, au moins tu seras sûr qu'ils ont le bon typage.

Agafra
Auteur

Non tout va bien c'étais simplement mettre un point et non une virgule pour l'enregistrement BBD. Merci !!!!!!!!!!!

Dans ce cas dans ta colonne il faut mettre un DECIMAL(10,X) où X représente le nombre de chiffres après la virgule. Car tu as dû stocker ton infos dans une VARCHAR non ?

Agafra
Auteur

Tout fonctionne impec. Merci pour tout !!