Rechercher : dans
Par :

MYSQL PHP SELECT DISTINC INVERSé

Dernière réponse le 5 jun 2008 à 18:55:15 shetanus, le 4 jun 2008 à 05:36:06 
 Signaler ce message aux modérateurs

Bonjour,

J'ai bien cherché dans les forums et trouvé des solutions... mais elle ne fonctionnent pas.

Mon probleme :

J'ai une base SQL avec les colonnes ID, PSEUDO, DATE

a chaque connexion j'insere un lien dans ma base pour des stats, ce qui donne une base du type :

1;shetanus;2007-02-23
2;teamA;2007-02-23
3;teamB;2007-02-23
4;teamA;2007-08-30
5;teamA;2007-09-01
6;teamB;2007-12-12
7;shetanus;2008-12-08
8;teamB;2008-12-20
9;shetanus;2008-12-21

AVEC LA REQUETE, SELECT id,pseudo,date FROM $table GROUP BY ip_adress, j'obtiens le résultat :
1;shetanus;2007-02-23
2;teamA;2007-02-23
3;teamB;2007-02-23

Je souhaite résupérer les valeurs les plus récentes par rapport à la date, c'est à dire :
9;shetanus;2008-12-21
8;teamB;2008-12-20
5;teamA;2007-09-01

Là, je bloque...

J'ai essayé, DISTINCT, MAX, une requete imbriquée dans une autre mais là je bloque...

Alors comme je sais que ça existe, si quelqu'un veux bien m'aider...

Merci beaucoup

Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « MYSQL PHP SELECT DISTINC INVERSé » dans :
Installation rapide de LAMP (Apache+MySql+php) sous Linux Voir LAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Sauvegarde restauration base de données Mysql VoirL'article suivant va présenter la manière la plus facile pour sauvegarder et restaurer les bases de données Mysql. Sauvegarde Pour sauvegarder une base de données existante il est conseillé de créer un dump. Pour dumper toutes les bases de...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Installation d'un serveur Web sous Linux (Apache, PHP et MySQL) VoirIntroduction Un serveur web est un logiciel permettant de rendre accessibles à de nombreux ordinateurs (les clients) des pages web stockées sur le disque. Cette fiche pratique explique comment installer le serveur web Apache sur un système de type...

1

lewis34, le 4 jun 2008 à 06:23:06

Bonjour tu a essayé avec order by...

SELECT id,pseudo,date FROM $table ORDER BY ip_adress ASC

Répondre à lewis34

2

V3n1, le 4 jun 2008 à 08:49:23

Salut,

Je pense plutôt à :
SELECT id, pseudo, date FROM &table ORDER BY date ASC

Cette requète marchera juste si ton champ "date" est de type date/heure

J'comprend pas ce que "ip_adress" vient faire ici.

Répondre à V3n1

3

lewis34, le 4 jun 2008 à 08:52:45

Oupss j'eatis pas ou trop réveillé ce matin..
en effet je voulais mettre

SELECT id,pseudo,date FROM $table ORDER BY date ASC...

désolé

Répondre à lewis34

4

shetanus, le 4 jun 2008 à 18:01:27

Merci les gars,

Pour ip_adress je me suis trompé car je travaille sur deux sites en meme temps excusez moi.
C'est bien les valeurs id,pseudo,date dont nous parlons.

C'est exactement ce que j'avais essayé au debut avec ORDER BY apres un GROUP BY pour dedoublonner...

Mais le résultat c'est qu'il me retourne le tableau inversé. exemple avec ORDER BY date ASC :

1;shetanus;2007-02-20
2;teamA;2007-02-21
3;teamB;2007-02-22

exemple avec ORDER BY date DESC :

3;teamB;2007-02-22
2;teamA;2007-02-21
1;shetanus;2007-02-20

Moi j'ai plusieurs valeurs identiques dans la colonne "pseudo" car les identifiants se connectent aléatoirement, et des dates differentes.

Je souhaite récupérer la date la plus a jour par rapport au pseudo. en gros quand il groupe les valeurs ils les groupe par ordre alphabetique, et lorsqu'il affiche les données grouppées sur ma page, c'est la date de premiere connexion qui sort et pas la derniere.

En tout cas, merci beaucoup les gars de votre aide.

Vous etes précieux dans ces moments là.

Répondre à shetanus

5

macgawel, le 4 jun 2008 à 18:23:48

Bonjour.

Si je comprends bien, tu veux récupérer pour chaque PSEUDO, la dernière DATE de connexion ?
Et le MAX(DATE) ne fonctionne pas ?!


PS : Au passage (rien à voir (?) avec le problème) : évite d'appeler ton champ DATE, ça peut engendrer des conflits...

Répondre à macgawel

8

shetanus, le 4 jun 2008 à 20:22:53

Merci mac gawel, j'ai renommé la colonne date par rapport a tes conseils. renommée en visite

avec la commande MAX date, je n'obtiens qu'une seule ligne. celle de la date la plus récente.

Aurais tu une idée pour la syntaxe ?

exemple

SELECT MAX(id) FROM $table WHERE (SELECT DISTINCT pseudo FROM $table) ORDER BY visite DESC ;
ou
SELECT * FROM $table AS #temptable WHERE (SELECT MAX(visite) FROM #temptable GROUP BY pseudo) ORDER BY visite DESC ;

C trop dur...

Là je bloque.

Répondre à shetanus

11

macgawel, le 5 jun 2008 à 13:44:02
  • +1

En fait, je pensais plutôt à

SELECT id, MAX(visite) from $table group by id;

Qui devrait te renvoyer une ligne par ID, avec le maximum des VISITE de l'ID...

Répondre à macgawel

6

lewis34, le 4 jun 2008 à 19:41:52

Re et ça ça marche pas ?

SELECT DISTINCT id, pseudo, date FROM &table ORDER BY date ASC

Répondre à lewis34

7

shetanus, le 4 jun 2008 à 20:13:28

Merci bien,

Cette commande sort distinctement le champ id, et comme il est unique, autant dire que c'est inutile.

j'ai toutes les lignes du tableau qui sortent.

Non, cela ne fonctionne pas :)

Répondre à shetanus

9

lewis34, le 4 jun 2008 à 21:14:17

Etu a essaye avec les tableaux (array)

/ /on crée la requête SQL
$sql = 'SELECT distinct * FROM ta_table ORDER by date ASC ; //si tu veut trier par date

// on envoie la requête
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on lance la requete qui affiche les resultats suivant la condition
while($data = mysql_fetch_array($req))
{
// on affiche les informations de l'enregistrement en cours
echo '<b>'.$data['champ1'].' '.$data['champ2'].'</b> ('.$data['champ3'].')';
// bien sur tu met les champs que tu veut
}

c'est une idée comme ça..

Répondre à lewis34

10

shetanus, le 5 jun 2008 à 09:39:44

Merci Lewis,

SELECT DSTINCT * me donne tous les enregistrements de la table.

Cela ne fonctionne pas.

C'est vraiment dure, si je trouve, je vous le dis.

Répondre à shetanus

12

lewis34, le 5 jun 2008 à 16:21:16

Oui c'est normal mais apres dans un array tu doit afficher que les champs que tu a selectionné dans ta boucle while

Répondre à lewis34

13

redlifebig, le 5 jun 2008 à 17:47:29
  • +1

Select max(id),pseudo,max(date) from table group by pseudo;

J’ai testé et ça marche

Répondre à redlifebig

14

 shetanus, le 5 jun 2008 à 18:55:15
  • +1

MERCI A REDLIFEBIG ET LEWIS... REPONSES 11 & 13

GRACE A VOUS G REUSSIT, C'etait bien

select max(id),pseudo,max(date) from table group by pseudo;

Cela m'a permit de comprendre comment utiliser le MAX() dans SQL

Bonne continuation les gars.

Répondre à shetanus