begin process at 2012 05 31 11:04:06
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

Transformer une requête sql imbriquée en deux requetes succesives


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Transformer une requête sql imbriquée en deux requetes succesives

vendredi 14 janvier 2011 à 20:41:43 | Transformer une requête sql imbriquée en deux requetes succesives

luciole135


Bonsoir,
J'ai installé sur mon site WordPress, une extension de stats qui a une fonction qui permet de voir les dernières visites faites par un visiteur et d'afficher les pages visitées par celui-ci.
Mais cette extension de stat affiche pour chaque visiteur les visites d'une façon inadéquate :
si un visiteur est venu la première fois le 5 janvier et la deuxième fois le 11, l'extension affiche à la date du 5 janvier sa première visite puis les suivantes au lieu d'afficher à la date du 11 sa dernière visite puis les précédentes !
ce qui n'est pas pratique car ainsi, il n'apparait que les nouveaux visiteurs du jour et pas ceux qui reviennent (les fidèles);
La requête est la suivante :
$sql = "SELECT ip,nation,os,browser,agent FROM $table_name WHERE spider='' GROUP BY ip ORDER BY id DESC LIMIT $LimitValue, $LIMIT";
J'ai trouvé par chance en farfouillant dans les forums une personne qui avait le même probblème que moi et a résolu le problème par la requete suivante :
$sql = "SELECT ip,nation,os,browser,agent FROM $table_name WHERE ( spider='' and id in(select max(id) from $table_name group by ip )) order by id desc LIMIT $LimitValue, $LIMIT";

c'est à dire une requête imbriquée !
L'inconvénient, c'est que cette requete est très longue pour le serveur.
Je voudrais savoir s'il est possible de transformer cette deuxième requête en deux requêtes succésive :
la première collectant les max(id), c'est à dire les entrées les plus récentes dans la tables de données pour chaque IP.
Comme par exemple :
$sql_0 = select max(id) from $table_name group by ip qui retourne un tableau avec "id" la plus récente de chaque IP.

Et dans une deuxième requete
$sql = "SELECT ip,nation,os,browser,agent FROM $table_name WHERE (spider='' AND id IN $sql_0) ORDER BY id DESC LIMIT $LimitValue, $LIMIT";
Mais cela fait une erreur, apparemment car la condition WHERE IN ne permet pas de lire dans un tableau PHP.
Comment puis-je faire pour que la deuxième requête puisse-t-elle lire dans le tableau des max(id), c'est à dire les plus récente.

J'ai cherché à savoir si on pouvait transformer un tableau PHP en liste SQL, mais je n'ai rien trouvé sur le net.

Avez-vous une solution qui permette de transformer cette requête imbriquée (qui consomme beaucoup de temps pour pas grand chose) en deux requêtes succéssives ?

Merci de votre aide.
Luciole

Mon site perso quand on veut arrêter de fumer sans manque physique ni prise de poids : http://additifstabac.free.fr
Un blog ami à lire pour faire de même : http://defumesansadditifs.over-blog.com/
lundi 17 janvier 2011 à 10:39:10 | Re : Transformer une requête sql imbriquée en deux requetes succesives

ludwig59

Bonjour

Il y a la fonction implode de PHP qui permet de transformer un tableau en chaine de caractères.

Implode
lundi 17 janvier 2011 à 14:22:10 | Re : Transformer une requête sql imbriquée en deux requetes succesives

luciole135


Merci de votre réponse, en farfouillant sur le net je suis arrivé à corriger cette requête en utilisant un alias (AS) avec une fonction de stat (MAX) et en triant sur cet alias :
$sql = "SELECT ip,nation,os,browser,agent, max(id) as MaxId FROM $table_name WHERE spider='' GROUP BY ip ORDER BY MaxId DESC LIMIT $LimitValue, $LIMIT";
depuis, les requêtes sont triées correctement, de la plus récente à la plus vieille.

Résolu.


Mon site perso quand on veut arrêter de fumer sans manque physique ni prise de poids : http://additifstabac.free.fr
Un blog ami à lire pour faire de même : http://defumesansadditifs.over-blog.com/


Cette discussion est classée dans : sql, requête, ip, id, by


Répondre à ce message

Sujets en rapport avec ce message

Requête SQL ne marche pas [ par OneHacker ] Alors j'ai une table Test avec un champ id(int) et un champ value(car char)voici ma table :0   value01   value1Je fait une requête : // pensez a ouvr Pb requête dans PHP [ par Ma2004 ] Bonjour à tous,J'ai un petit souci avec une de mes requêtes et plus précisément la requête suivante:$requete=mysql_query("SELECT * FROM $gauche,$droit Amélioration requête SQL [ par nounours21_6 ] Bonjour tout le monde,j'ai un petit soucis de requête SQL,j'ai une table de membres que je mets à jours régulièrement afin de créer un graphique d'évo renomer un champs sql [ par kelm_by ] salut,j'ai une table nomé tab ou il ya un champs id a insertion automatique mais j'ai suprimer quelque ligne alors comment renomer l'id de 1 au dernie Requête SQL [ par magicsmacks ] Bonjour, Je cherche à créer une requête SQL.En fait j'ai 2 tables X et Y contenant toutes les deux 3 colonnes :Nom, prenom, motdp. Dans ma table Y l Requete MySQL [ par flopad ] Bonjour,comment est ce que je dois faire pour qu'après avoir écrit le numéro unique dans la table id_unique, j'ajoute le rédacteur et en même temps je Prob sur SQL [ par stu76 ] Re bonjour,J'ai un petit problème sur une requête SQL je comprend pas car toutes mes tables existe et mes champs aussi. Le but est que a partir de l'i Problème requete SQL [ par darkwisk ] Salut à tous.....Voici mon problème, j'ai 2 "id" dans une variable $bien = "13,22";je voudrai recuperer des infos de ces 2 champs de ma table, pour le Prob SQL [ par stu76 ] Bonsoir, j'ai  un prob avec une requête sql voici ce qui s'affiche :Erreur SQL! SELECT classe.*, cours.*, resultats.*, eleves.*, perdiodes.* FROM clas


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales