[SQL] Select, Distinct, Max, Group by et autres fariboles

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


mr_go
WRInaute accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

[SQL] Select, Distinct, Max, Group by et autres fariboles

Message le Ven Juil 21, 2006 10:53

Bon hé bien je sèche un peu sur une requête... :oops: :oops: :oops:


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
WRInaute accro
 
Messages: 2915
Inscription: Ven Sep 05, 2003 10:46

Message le Ven Juil 21, 2006 11:05

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)
Dernière édition par blman le Ven Juil 21, 2006 11:27, édité 2 fois.


ltressens
WRInaute passionné
WRInaute passionné
 
Messages: 551
Inscription: Ven Avr 02, 2004 14:52

Message le Ven Juil 21, 2006 11:16

blman : le tri sur sa date, meme ecrite sous forme de string marcherait.
lui il veut grouper par table/champ et recuperer la derniere action


ltressens
WRInaute passionné
WRInaute passionné
 
Messages: 551
Inscription: Ven Avr 02, 2004 14:52

Message le Ven Juil 21, 2006 11:22

Totalement au hasard, pas de mysql pour tester, j'avoue mon faible c oracle ;)

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 accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

Message le Ven Juil 21, 2006 13:10

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 occasionnel
WRInaute occasionnel
 
Messages: 163
Inscription: Lun Sep 20, 2004 15:50

Message le Ven Juil 21, 2006 13:37

Salut,

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 accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

Message le Ven Juil 21, 2006 13:45

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 passionné
WRInaute passionné
 
Messages: 551
Inscription: Ven Avr 02, 2004 14:52

Message le Ven Juil 21, 2006 13:49

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 accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

Message le Ven Juil 21, 2006 14:03

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 accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

Message le Ven Juil 21, 2006 14:16

Je rebondis sur moi même ^^ :

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... =)


ltressens
WRInaute passionné
WRInaute passionné
 
Messages: 551
Inscription: Ven Avr 02, 2004 14:52

Message le Ven Juil 21, 2006 14:38

La derniere que je t'ai donné fonctionne sur un mysql que j'ai dégoté. Tables InnoDB. Mysql 5.0.18


mr_go
WRInaute accro
WRInaute accro
 
Messages: 1944
Inscription: Mer Sep 21, 2005 16:02

Message le Ven Juil 21, 2006 14:41

Mysql 5.0.18


En local, je n'en suis qu'à la version 4.x.

Néanmoins, j'ai tenté d'émuler cette requete via MDB2, mais j'obtiens une erreur de syntaxe... :(


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités