Soucis avec une requete SQL - PHP - Programmation
Marsh Posté le 03-08-2004 à 17:44:24
si tu sélectionnes l'id, tu pourras pas faire de regroupement, vu que l'id est unique
Marsh Posté le 03-08-2004 à 19:22:45
ReplyMarsh Posté le 04-08-2004 à 09:46:09
ReplyMarsh Posté le 04-08-2004 à 10:05:54
nycius a écrit : Je suis obligé car sinon comment recuperer l'id ? |
et pourquoi veux tu récupérer l'id ?
Marsh Posté le 04-08-2004 à 10:07:51
pour ensuite le passer dans le lien pour quil aille chercher le basard
Marsh Posté le 04-08-2004 à 10:11:56
Dans ce cas l'ID sera celui du topic Blob(1) ou BLop(3) il y a un soucis dans ta conception non ?
Marsh Posté le 04-08-2004 à 10:12:24
comment veux-tu qu'il distingue l'id si tu groupes plusieurs sujets d'id différentes?
Marsh Posté le 04-08-2004 à 10:14:19
oui ya un enorme soucis de conception
je reprend une merde deja existante et je dois modifier les trucs sans tout casser , super
je vois pas comment faire cest vraiment penible
Marsh Posté le 04-08-2004 à 10:16:04
nycius a écrit : pour ensuite le passer dans le lien pour quil aille chercher le basard |
faut repenser ta manière de faire alors, parce que tu ne pourras rien regrouper si tu sélectionnes aussi l'id
edit:
Marsh Posté le 04-08-2004 à 10:17:43
nycius a écrit : oui ya un enorme soucis de conception |
bah c'est pas dur, si tu groupes c'est que t'as pas besoin de distinguer l'id donc si tu veux vraiment l'id tu dégroupes et t'affiches l'id
Marsh Posté le 04-08-2004 à 10:19:02
Je ne connais pas le contexte mais s'il existe deux occurence dans ta table, bien qu'ayant le meme nom c'est qu'elles sont différentes ...Donc normalement les deux doivent être selctionnable. Si aucun doublons sur le nom ne devrait être present, une verification a l'insertion serait bénéfique, ainsi qu'une propriété unique sur le champ nom ?
qu'en penses tu ?
Marsh Posté le 04-08-2004 à 10:40:28
Justement quelques fois le nom est egale mais seul l'id differe
Marsh Posté le 04-08-2004 à 11:17:39
si l'identifiant primaire differe il est dangereux de les assimiler selon le nom et de les gerer selon UN SEUL des identifiant du group ...
Dans le cas d'une gestion darticle le nom est le meme pour tout les articles X mais ils ont un identifiant différent et donc il faut utiliser une quantité par exemple, ne peut tu pas faire pareil ?
Marsh Posté le 04-08-2004 à 11:44:54
cest a dire ?
en gros moi mon soucis est le suivant
jaffiche 30 informations
si qqun a inserer une info a 12h40 avec le titre "Info 10" et que qqun en insere une a 12h42 avec le meme titre
ca maficche :
12h42 - Info 10
12h40 - Info 10
alors que moi jaimerai quil me sorte seulement celui de 12h42 sinon ca fait pas mal de doublon et pas propre
Marsh Posté le 04-08-2004 à 12:41:29
> j'ai un soucis sur une requete SQL
> SELECT id, date, nom, sujet_msg FROM TABLE WHERE v=1 ORDER BY date
> DESC LIMIT 0,30
>seulement soucis : dans mon resultat jaimerai regroupé les resultats
>parce que si un enregistrement avec le meme nom a été enregistré il >ressort plusieurs fois dans mon resultat
logique !!!! tu demande de lister selon la date au lieu du champ nom il faut plutot faire un classement par nom
donc si le champ (blob glob ...) est le champ nom faut plutot faire ...>suite
>comment je peux dire à ma requete qu'elle regroupe les Blop ou les >Glop au lieu de me les lister;
suite>
select id, .... from ... order by nom asc, date desc
group by nom, date where ... limit 0,30
alors pour "pas tout casser" faire une table annexe qui reprends les infos de la table existante. vous y copiez les informations liées au nom, et ensuite vous cherchez les informations liées à l'id et la date dans la table principale.
attention, à chaque requete dans votre table ajoutée faut vérifier qu'aucun lien n'est modifié.
donc select nom, info1_nom, info2_nom from table_order_nom
ensuite select id, date, info1_date, info2_date, .... from table
where nom = <nom_table_order_nom>
attention faut alors que le nom qui sert pour la liaison ne puisse plus être modifié.
Marsh Posté le 04-08-2004 à 13:19:24
select id, .... from ... order by nom asc, date desc
group by nom, date where ... limit 0,30
jai essayer ca mais ca me met une erreur SQL
Marsh Posté le 05-08-2004 à 11:10:34
si tu as "id,nom,date" dans le "select", il faut que les trois apparaissent dans le "group by"
Marsh Posté le 09-08-2004 à 11:03:55
ca ne marche pas non plus ca me met une erreur SQL
le group by fait planter
Marsh Posté le 09-08-2004 à 11:11:40
je comprends pas, si il ya deux topics differents(vu ke deux ids differents) avec le meme nom, tu as besoin d'afficher les deux, sinon tu en occulte o moins un non ?
Si en revanche ce sont des doublons non necessaires pourquoi ne pas supprimer ces doublons ?
Marsh Posté le 09-08-2004 à 11:22:26
select max(id), max(date), max(nom), sujet_msg
from latable
group by sujet_msg
order by max(date)
limit 0, 30
Par contre, autant tu n'auras qu'une ligne pour chaque titre de sujet, autant l'auteur associé risque d'être erroné (en effet, il va cherche le plus grand dans l'ordre alphabétique, pas forcément celui correspondant à l'ID retourné) en effet, le max(nom) vient foutre le bordel, et si tu le vires, tu auras tous les doublons saisis par des utilisateurs différents.
Dans l'idéal, il faudrait faire une sous-requête, mais MySQL ne supporte ça que dans les versions très récentes (et pas présente chez les principaux hébergeurs) :
select t1.id, t1.date, t1.nom, t1.sujet msg
from latable t1
where t1.id in (select max(id) from latable group by sujet_msg)
order by id desc
limit 0, 30
Si tu ne peux pas faire la sous-requête, alors t'as pas d'autre choix que d'éxécuter cette sous-requête seule en premier (avec un limit 0, 30 ainsi que le order), puis boucler dessus pour retrouver les autres infos des id d'articles retournés.
Marsh Posté le 09-08-2004 à 11:32:53
serty2 a écrit : je comprends pas, si il ya deux topics differents(vu ke deux ids differents) avec le meme nom, tu as besoin d'afficher les deux, sinon tu en occulte o moins un non ? |
en fait quand je clic sur le 1er jai une liste avec tout ceux en rapport avec l'id
en fait ca donnera ca :
- 1 ->> blop (10h15)
-101 --> gajshq (10h19)
-102 --> dijdfg (10h40)
- 2 ->> glop (09h05)
-201 --> jh (10h22)
en fait jaimerai que ca maffiche ca :
- 1 ->> blop (10h40)
- 2 ->> glop (10h22)
Marsh Posté le 09-08-2004 à 11:57:21
voila ce que jaurai besoin de faire et qui marcherait si la requete passait
qqun sait si c possible de faire ca ? :
select id, .... from ... group by substr("id", 0, 2) limit 0,30
en gros lui dire qui group selon l'id cropé de ses 2 derniers chiffres
Marsh Posté le 09-08-2004 à 13:26:05
il me semble que le group by ne fonctionne qu'avec des fonctions de groupes, c'est a dire si tu select le MAX, MIN ou SUM(...etc), sinon la clause group by n'a aucun effet (je peux aussi me tromper mais il me semble que c'est comme ca)
Marsh Posté le 09-08-2004 à 13:45:53
serty2 a écrit : il me semble que le group by ne fonctionne qu'avec des fonctions de groupes, c'est a dire si tu select le MAX, MIN ou SUM(...etc), sinon la clause group by n'a aucun effet (je peux aussi me tromper mais il me semble que c'est comme ca) |
En effet, sinon elle se comporte comme un order by (sâchant qu'en plus elle ne peut utiliser que des champs retournés, alors que le order by peut utiliser n'importe quel champ de n'importe quelle table participant à la requête)
Marsh Posté le 09-08-2004 à 14:58:48
Arjuna a écrit : En effet, sinon elle se comporte comme un order by (sâchant qu'en plus elle ne peut utiliser que des champs retournés, alors que le order by peut utiliser n'importe quel champ de n'importe quelle table participant à la requête) |
Merci pour cet eclaircissement
Marsh Posté le 03-08-2004 à 17:42:31
Salut
j'ai un soucis sur une requete SQL
Je vous explique : j'ai une table qui contient 150 enregistrement
dans chaque table jai un ID avec une valeur correspondante
seulement quelques fois des enregistrement ont la meme valeur mais pas le meme ID
du genre :
1 Blop
2 Glop
3 Blop
je fais cette requete la qui me permet dafficher les 30 derniers enregistrements
seulement soucis : dans mon resultat jaimerai regroupé les resultats
parce que si un enregistrement avec le meme nom a été enregistré il ressort plusieurs fois dans mon resultat
comment je peux dire a ma requete quelle regroupe les Blop ou les Glop au lieu de me les lister