[SQL] Select, Distinct, Max, Group by et autres fariboles
12 messages
• Page 1 sur 1
-

mr_go - WRInaute passionné

- Messages: 1945
- Inscription: 21 Sep 2005
[SQL] Select, Distinct, Max, Group by et autres fariboles
Bon hé bien je sèche un peu sur une requête...
Donc, je possède une table "historique" permettant d'enregistrer diverses actions relatives à des logins (plus de détails par ici:
historique
id_historique/date_insert/login/table_cible/champ/valeur
Quelques données :
1 20060721112711 client3 client nom Dupuis
2 20060719111630 client3 client newsletter 1
3 20060721112826 client3 client newsletter 0
4 20060913112935 client3 client newsletter 1
Je souhaiterais créer une requete permettant de faire ressortir, pour un login donné, les dernières action effectuées pour le couple table_cible/champ .
Donc ici, pour le login client3, faire ressortir :
1 20060721112711 client3 client nom Dupuis
4 20060913112935 client3 client newsletter 1
J'ai tenté en vain quelques requêtes (avec GROUP BY, MAX etc...), mais je bloque vraiment pour le coup.
Si une âme charitable passant par là voulait bien éclairer ma lanterne... je lui en serait éternellement reconnaissant.
Merci par avance
Donc, je possède une table "historique" permettant d'enregistrer diverses actions relatives à des logins (plus de détails par ici:
historique
id_historique/date_insert/login/table_cible/champ/valeur
Quelques données :
1 20060721112711 client3 client nom Dupuis
2 20060719111630 client3 client newsletter 1
3 20060721112826 client3 client newsletter 0
4 20060913112935 client3 client newsletter 1
Je souhaiterais créer une requete permettant de faire ressortir, pour un login donné, les dernières action effectuées pour le couple table_cible/champ .
Donc ici, pour le login client3, faire ressortir :
1 20060721112711 client3 client nom Dupuis
4 20060913112935 client3 client newsletter 1
J'ai tenté en vain quelques requêtes (avec GROUP BY, MAX etc...), mais je bloque vraiment pour le coup.
Si une âme charitable passant par là voulait bien éclairer ma lanterne... je lui en serait éternellement reconnaissant.
Merci par avance
-

blman - WRInaute accro

- Messages: 3077
- Inscription: 5 Sep 2003
Mr Go, je pense qu'il te manque un champ date (DATETIME) dans ton journal d'historique (ça correspond à une date ça : 20060721112711 ?)
La requête sera alors très facile :
SELECT ce que tu veux WHERE table_cible="'.$tatable.'" ORDER BY TaDate LIMIT 0,30 (affiche les 30 dernières actions de ton client)
La requête sera alors très facile :
SELECT ce que tu veux WHERE table_cible="'.$tatable.'" ORDER BY TaDate LIMIT 0,30 (affiche les 30 dernières actions de ton client)
Dernière édition par blman le Ven Juil 21, 2006 11:27, édité 2 fois.
-

ltressens - WRInaute impliqué

- Messages: 551
- Inscription: 2 Avr 2004
Totalement au hasard, pas de mysql pour tester, j'avoue mon faible c oracle
J'ai mis le "select mdate.." du milieu car je savais plus sil était possible dans le select le plus imbriqué de grouper sur des champs non sélectés. Si oui, alors le select du milieu saute.
- Code: Tout sélectionner
select * from table where login='client3' and date in
(select mdate from (
(select max(date) as mdate, table_cible_champ from table where login='client3' group by table_cible, champ)
)
J'ai mis le "select mdate.." du milieu car je savais plus sil était possible dans le select le plus imbriqué de grouper sur des champs non sélectés. Si oui, alors le select du milieu saute.
-

mr_go - WRInaute passionné

- Messages: 1945
- Inscription: 21 Sep 2005
Malheureusement, il m'apparaît une jolie erreur de syntaxe...
- Code: Tout sélectionner
SELECT *
from historique
WHERE login='client3'
AND date_insert IN
(select mdate from ((select max(date_insert) as mdate, table_cible, champ from historique where login='client3' group by table_cible, champ)
)
MDB2 Error: syntax error
-

siddhy - WRInaute discret

- Messages: 163
- Inscription: 20 Sep 2004
Salut,
J'ai fait un petit test vite fait, :
Chez moi ça me sort le resultat demandé.
C'est ça ?
J'ai fait un petit test vite fait, :
- Code: Tout sélectionner
SELECT *
FROM `histo`
WHERE `login` = 'client3'
GROUP BY `champ`
ORDER BY `date_insert` DESC
Chez moi ça me sort le resultat demandé.
C'est ça ?
-

mr_go - WRInaute passionné

- Messages: 1945
- Inscription: 21 Sep 2005
- Code: Tout sélectionner
SELECT *
FROM `historique`
WHERE `login` = 'client3'
GROUP BY `table_cible`,`champ`
ORDER BY `date_insert` DESC
retourne
- Code: Tout sélectionner
Array (
[0] => Array ( [id_historique] => 1 [date_insert] => 20060721112711 [login] => client3 [table_cible] => client [champ] => nom [valeur] => Dupuis )
[1] => Array ( [id_historique] => 2 [date_insert] => 20060719111630 [login] => client3 [table_cible] => client [champ] => newsletter [valeur] => 1 ) )
date_insert devrait être égal à 20060921112935 pour la deuxième ligne.
-

ltressens - WRInaute impliqué

- Messages: 551
- Inscription: 2 Avr 2004
Nouvelle tentative, va falloir que tu renommes les champs :
- Code: Tout sélectionner
select * from matable where login='client3' and date in (
select mdate from (select max(date) as mdate, cible, champ from matable where login='client3' group by cible, champ) as mdate
)
-

mr_go - WRInaute passionné

- Messages: 1945
- Inscription: 21 Sep 2005
select * from historique where login='client3' and date_insert in (
select mdate
from (select max(date) as mdate, table_cible, champ from historique where login='client3' group by table_cible, champ) as mdate
)
MDB2 Error: syntax error
Malheureusement, non plus... ;/
-

mr_go - WRInaute passionné

- Messages: 1945
- Inscription: 21 Sep 2005
Je rebondis sur moi même ^^ :
pour donner une idée, la requête devrait être la suivante
Bien évidemment, cette requête ne marche absolument pas... =)
pour donner une idée, la requête devrait être la suivante
- Code: Tout sélectionner
select DISTINCT (table_cible,champ), [AUTRES CHAMPS]
from historique
where login='client3'
ORDER BY date_insert DESC
Bien évidemment, cette requête ne marche absolument pas... =)
12 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- sql : requête select MAX(champ) from table
- Contraire de "SELECT DISTINCT" en SQL
- Problème select distinct
- Probleme de SELECT DISTINCT
- MySql selection sans doublon (select distinct)
- Formulation d'un requête mysql : MAX, COUNT et GROUP BY
- MySQL : SELECT spécial avec GROUP BY sur condition ?
- select max(id) et clause where
- Problème avec clause DISTINCT dans requête SQL
- Aide PHP pour la fonction SELECT MAX
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
