| |
Savez-vous bien utiliser les outils de mesure d'audience ? Effectuez-vous un calcul de ROI (Retour sur investissement) pour savoir comment améliorer vos campagnes emarketing ? Savez-vous utiliser les bons outils pour booster votre taux de transformation ? La formation Web Analytics de Ranking Metrics, présentée par un expert reconnu officiellement par Google Analytics, vous apportera les réponses à toutes vos questions ! ===> Informations et inscriptions.
|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
nickargall WRInaute accro

Inscrit le: 13 Juin 2005 Messages: 3866 Localisation: Exilé au Groland à cause de Joe Dalton
|
Posté le : Ven Nov 23, 2007 17:55 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
Bonsoir
Je vais essayer d'être clair ...
J'ai une requête:
| Code: |
SELECT DISTINCT(`id_rep`),`message`,`id_forum`,`id_message`,`sujet`,`date`,`heure`,`nom` FROM `messages` WHERE `id_rep`<>0 GROUP BY `id_rep` DESC
UNION
SELECT `id_rep`,`message`,`id_forum`,`id_message`,`sujet`,`date`,`heure`,`nom` FROM `messages` WHERE `id_rep`=0
ORDER BY `date` DESC, `heure` DESC
|
La seconde partie me donne ce que je veux. Par contre, pour le premier bloc, j'ai besoin de garder le select distinct et le group by pour n'avoir qu'un enregistrement ayant le même id_rep.
Mais j'ai également besoin que cet enregistrement unique soit le dernier inscrit dans ma base - cad faire un tri sur `date` DESC et `heure`DESC en même temps que le GROUP BY dans la premiere requete- mais c'est pas possible.
SI quelqu'un me trouve la formule magique, je louerai son nom jusqu'en 2008. |
|
| |
|
 |
YoyoS WRInaute accro

Inscrit le: 14 Sep 2006 Messages: 2379
|
Posté le : Ven Nov 23, 2007 18:25 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
Hi,
J'ai pas trop compris tes explications même si tu as voulu être clair Par contre, c'est peut-être la façon dont tu as commencé ta requête que je comprends pas trop. Puis le group by, je ne l'ai jamais vu en plein milieu d'un union comme ça !
Tu veux sélectionner quoi exactement ? Tu veux que ta requête te sorte un seul enregistrement ? Et si on pouvait avoir un extrait de la table message !  |
|
| |
|
 |
nickargall WRInaute accro

Inscrit le: 13 Juin 2005 Messages: 3866 Localisation: Exilé au Groland à cause de Joe Dalton
|
Posté le : Ven Nov 23, 2007 18:33 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
Je le savais que j'étais pas clair ...
J'ai une table message
id_message | id_forum |sujet|message|nom|date|heure|id_rep|div
Deux cas de figure:
Des messages avec un id_rep=0 (qui sont des sujets de discussion)
Des messages avec un id_rep=variable (qui sont des réponses aux discussion dont l'id_message=$variable)
Ce que je veux :
Regrouper dans un même résultat :
tous les messages ayant un id_rep=0
et tous les messages ayant un id_rep=$variable DISTINCT
et trier le tout sur date et heure.. avec parfois des restrictions du genre div=1, id_forum=12, ou encore nom='durand' par exemple
Ma requete en haut marche presque, sauf que par exemple pour l'enregistrement correspondant à un id_rep=215, par exemple, il me sort pas forcément le dernier enregistrement. C'est ce que je veux avoir ...
Edit : Le group by, si je le mets pas, c'est comme si le distinct marchait pas, il va me sortir tous les messages ayant le même id_rep |
|
| |
|
 |
YoyoS WRInaute accro

Inscrit le: 14 Sep 2006 Messages: 2379
|
Posté le : Ven Nov 23, 2007 18:53 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
Donc tu veux sélectionner des discussions existantes dans ta bdd ? Et pour chaque discussion afficher son dernier message en gros ?
Donc dans ta table message, tu as plein de id_rep identiques qui correspondent aux messages de la discussion id_message.
Et tu veux sélectionner: Toutes les discussions id_message = x et ses messages id_rep = x
Tu a déjà fait ça en requêtes séparées déjà ? C'est un peu bizarre quand même ton système ^^
Dernière édition par YoyoS le Ven Nov 23, 2007 19:09; édité 1 fois |
|
| |
|
 |
jcaron WRInaute passionné

Inscrit le: 13 Fév 2004 Messages: 521 Localisation: Paris
|
Posté le : Ven Nov 23, 2007 19:06 Sujet du message: Re: Pb d'organisation d'une UNION de deux requetes SELECT en |
|
|
Je te propose (pour remplacer la première partie):
| Code: |
SELECT id_rep,message,id_forum,id_message,sujet,date,heure,nom FROM messages WHERE id_message IN (SELECT max(id_message) FROM messages WHERE id_rep<>0 GROUP BY id_rep)
|
Evidemment il faut une BDD qui gère les sub-selects... Et ça considère que les id_messages sont alloués de façon croissante. C'était bien le dernier message chaque discussion que tu voulais?
Jacques. |
|
| |
|
 |
nickargall WRInaute accro

Inscrit le: 13 Juin 2005 Messages: 3866 Localisation: Exilé au Groland à cause de Joe Dalton
|
Posté le : Ven Nov 23, 2007 23:36 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
Bonsoir Jacques
En effet c'est bien le dernier message de chaque discussion que je voulais. Et en effet, les id_message sont alloués de façon croissante.
Mais là les résultats qui me sont renvoyés sont
- uniquement le dernier "message" enregistré sur la base (dont l' id_rep=2213) et non le dernier message de chaque discussion
- suivi de tous les "débuts de discussion" dont l' id_rep=0.
| Code: |
SELECT id_rep,message,id_forum,id_message,sujet,date,heure,nom FROM messages WHERE id_message IN (SELECT max(id_message) FROM messages WHERE id_rep<>0 ) AND `div`='1' GROUP BY `id_rep` UNION SELECT `id_rep`,`message`,`id_forum`,`id_message`,`sujet`,`date`,`heure`,`nom` FROM `messages` WHERE `div`='1' AND `id_rep`=0
|
|
|
| |
|
 |
jcaron WRInaute passionné

Inscrit le: 13 Fév 2004 Messages: 521 Localisation: Paris
|
Posté le : Ven Nov 23, 2007 23:59 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
| nickargall a écrit: |
| Code: |
SELECT id_rep,message,id_forum,id_message,sujet,date,heure,nom FROM messages WHERE id_message IN (SELECT max(id_message) FROM messages WHERE id_rep<>0 ) AND `div`='1' GROUP BY `id_rep` UNION SELECT `id_rep`,`message`,`id_forum`,`id_message`,`sujet`,`date`,`heure`,`nom` FROM `messages` WHERE `div`='1' AND `id_rep`=0
|
|
Tu n'as pas mis les parenthèses au bon endroit, vérifie ce que je disais dans mon message. Le GROUP BY est dans le sub-select...
Jacques. |
|
| |
|
 |
nickargall WRInaute accro

Inscrit le: 13 Juin 2005 Messages: 3866 Localisation: Exilé au Groland à cause de Joe Dalton
|
Posté le : Sam Nov 24, 2007 0:10 Sujet du message: Pb d'organisation d'une UNION de deux requetes SELECT en sql |
|
|
C'est sur, si je fais pas comme on me dit, ça risque pas de marcher
Merci Jacques, c'est impeccable. |
|
| |
|
 |
| |
|
|
|
|
Autres sujets de discussion :
|
|