Soucis avec une requete SQL

Soucis avec une requete SQL - PHP - Programmation

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  
 

Code :
  1. 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
 
comment je peux dire a ma requete quelle regroupe les Blop ou les Glop au lieu de me les lister

Reply

Marsh Posté le 03-08-2004 à 17:42:31   

Reply

Marsh Posté le 03-08-2004 à 17:43:39    

GROUP BY  :)

Reply

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


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 03-08-2004 à 17:48:17    

en fait jaffiche le sujet du message

Reply

Marsh Posté le 03-08-2004 à 19:22:45    

mais tu veux grouper par quoi? par titre de topic?


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 04-08-2004 à 09:26:00    

oui voila

Reply

Marsh Posté le 04-08-2004 à 09:46:09    

faut pas sélectionner l'id dans ta requete alorz :o


---------------
SHOOT ME AGAIN WEBZINE
Reply

Marsh Posté le 04-08-2004 à 10:05:14    

Je suis obligé car sinon comment recuperer l'id ?

Reply

Marsh 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 ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 04-08-2004 à 10:07:51    

pour ensuite le passer dans le lien pour quil aille chercher le basard

Reply

Marsh Posté le 04-08-2004 à 10:07:51   

Reply

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 ?

Reply

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? [:le kneu]


Message édité par Dawa le 04-08-2004 à 10:12:55

---------------
SHOOT ME AGAIN WEBZINE
Reply

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

Reply

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: [:benou_grilled]


Message édité par Harkonnen le 04-08-2004 à 10:16:31

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 04-08-2004 à 10:17:43    

nycius a écrit :

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


 
 
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 :o


---------------
SHOOT ME AGAIN WEBZINE
Reply

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 ?

Reply

Marsh Posté le 04-08-2004 à 10:40:28    

Justement quelques fois le nom est egale mais seul l'id differe

Reply

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 ?

Reply

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

Reply

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é.


Message édité par p lejarre le 04-08-2004 à 12:45:17
Reply

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

Reply

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"

Reply

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

Reply

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 ?

Reply

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.

Reply

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 ?
 
Si en revanche ce sont des doublons non necessaires pourquoi ne pas supprimer ces doublons ?


 
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)
 

Reply

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

Reply

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)

Reply

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)

Reply

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 :p

Reply

Marsh Posté le 09-08-2004 à 15:12:16    

zut :(

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed