Requete sql un peu spéciale - SQL/NoSQL - Programmation
Marsh Posté le 27-03-2006 à 22:37:41
Sauf erreur, la restriction "LIMIT 10" s'applique aux résultats de la requête d'une manière gloable, et ne s'applique pas aux résultats de sous-requêtes. Donc, il ne semble pas que cela soit faisable.
Une solution consisterait à diviser cette requête en plusieurs requêtes, une pour chacune des dix dernières personnes.
Marsh Posté le 28-03-2006 à 09:29:53
Tu aurais un script création table + insertion de quelques lignes pour qu'on puisse tester ?
J'aime ce genre de problème à résoudre
Marsh Posté le 28-03-2006 à 10:06:24
Faut passer par une sous requete
Ta première requete te renvoie la date max du message pour chaque utilisateur. La deuxieme les messages qui correspondent, puis tu fais limit 10 et OK
Un truc dans le genre si je dis pas de conneries à adapter en fonction du SGBD (non testé)
|
Marsh Posté le 28-03-2006 à 11:04:54
jeoff a écrit : Tu aurais un script création table + insertion de quelques lignes pour qu'on puisse tester ? |
Bon courage alors
Ce truc m'a retourné la tête mais d'une force ...
Dis moi si ça conviens pour créer une table (oui y'a trois semaines j'avais jamais entendu parler de sql ou de php, c'est encore tout nouveau pour moi ) :
Code :
|
Merci
Sinon la technique de 10 entrées = 10 requètes pourquoi pas, mais ça risque de surcharger le serveur de façon monstre non ?? Déjà là ça va pas être spécialement économique, mais alors avec 10 requètes
Marsh Posté le 28-03-2006 à 12:23:46
Essaye ça
SELECT P1.from, P1.to, P1.date, P1.message
FROM pager AS P1
WHERE P1.to = '0001'
AND P1.DATE =
(SELECT max( P2.DATE )
FROM pager AS P2
WHERE P2.from = P1.from
AND P2.to = '0001' )
GROUP BY P1.from
ORDER BY P1.date DESC
LIMIT 0 , 10
Marsh Posté le 28-03-2006 à 13:01:34
jeoff a écrit : Essaye ça |
Ca fonctionne niquel
Alors là merci
Marsh Posté le 28-03-2006 à 13:15:31
Le plus important n'étant pas que ça marche mais que tu comprennes comment ca marche
Marsh Posté le 28-03-2006 à 13:44:22
jeoff a écrit : Le plus important n'étant pas que ça marche mais que tu comprennes comment ca marche |
De ce que j'en ai compris : ça me cloisonne ma table en deux entités, P1 et P2
J'aurai pas pu sortir ça directement à mon niveau, c'est clair et net mais une fois la requete sous les yeux et après l'avoir exploitée dans un fichier php...enfin je pense avoir saisi le sens de la requète, c'est déjà pas mal
Marsh Posté le 28-03-2006 à 14:06:01
je me disais bien que les messages dans la table ressemblait à des vieux messages de site de rencontre avec hotesses (ou bot, au choix ). Je comprends mieux en voyant la sign
Bah donc c'est bien, au moins on saura que nos messages sur ce site sont générés par des scripts
Marsh Posté le 28-03-2006 à 14:21:54
Juste par curiosité, est-ce que quelque chose comme cela répond au problème ?
SELECT P2.*
FROM (
SELECT from, MAX(date) as date
FROM pager
WHERE to = '0001'
GROUP BY from
ORDER BY date DESC
LIMIT 10
) AS P1
LEFT JOIN pager P2 ON P2.from=P1.from AND P2.date=P1.date
Marsh Posté le 28-03-2006 à 14:38:58
En dehors des problèmes de syntaxe, voilà ce que ça donne :
Code :
|
Marsh Posté le 28-03-2006 à 15:53:03
Manque le "from" dans le SELECT de la requête interne
L'idée, c'est d'avoir une requête qui récupère la date du dernier message de chaque user (en ne gardant que les 10 plus récents. Un résultat de requête étant fortement similaire à une table (des lignes, des colonnes, quoi ) ,on fait une jointure entre ce résultat et la table qui permet de récupérer le message correspondant
(Le dernier LIMIT est inutile )
Marsh Posté le 28-03-2006 à 15:58:05
Djebel1 a écrit : je me disais bien que les messages dans la table ressemblait à des vieux messages de site de rencontre avec hotesses (ou bot, au choix ). Je comprends mieux en voyant la sign |
Rien à voir
Ca c'est la partie messages privés, les messages d'utilisateur à utilisateur
Ils sont limités à une trentaine de caractères et ne déclenchent pas l'envoi de mails, donc ils ne servent pas à grand chose en fait sinon à faire beau
Les messages ont été écrits par moi et une seconde personne pour le besoin des tests
Je certifie ne pas utiliser de bot ni de personne pour faire ça et ça restera le cas, au contraire d'un concurent très connu et leader de son segment en europe (non je ne citererai pas de nom ) qui a la facheuse manie d'envoyer des messages de ce genre 2 jours après la fin de l'abonnement du gars
Quoque ils certifient eux aussi ne pas utiliser de bots remarque
Marsh Posté le 27-03-2006 à 20:45:39
Enfin spéciale...en fait un truc classique mais qui me pose de gros problèmes depuis plusieures heures
Alors je souhaiterai afficher, dans une fênetre prévue à cet effet, 10 messages qui sont parvenus à une personne en mp.
Je ne souhaite pas les 10 derniers messages mais le dernier message des 10 dernières personnes
Donc une ligne = un utilisateur ainsi que son dernier message, et ceci sur 10 lignes
Dans ma table nommée "pager" j'ai un champ "id" (incrémentation auto), un champ "from" (celui qui envoie le message), un champ "to" (le receveur), un champ date (unix) et un champ message bien sur.
J'ai tenté pas mal de choses mais le seul truc que j'ai réussi à sortir c'est cette requète :
(0001 = moi, lorsque je teste sur phpmyadmin)
Qui me donne bien 10 personnes séparées, mais qui me fourni le...premier message qu'ils m'ont adressé
Et impossible de sortir le DERNIER message écrit par chaque utilisateur, hormis avec cette requète :
Mais qui me donne TOUT les messages de TOUS les utilisateurs. Un mec m'écrit 5 fois un mp, c'est lui qui va sortir 5 fois, donc pas un bon système.
Si quelqu'un a une idée j'suis preneur, j'ai testé les max(id), les DISTINCT et un peu tout sans succès, surement du à ma totale inexpérience
Message édité par Syl_83 le 27-03-2006 à 20:53:32
---------------
Michael Schumacher laissera une trace immense dans l'histoire de notre sport. Il en a aussi laissé une belle sur les flancs de ma Williams à Adélaïde, en 1994...