Optimisation SQL + question [Réglé]

Optimisation SQL + question [Réglé] - PHP - Programmation

Marsh Posté le 02-02-2005 à 19:54:09    

Bonsoir à tous!
 
Je desire optimiser cette requete :
 
$req_dernier_membre_a = mysql_query("SELECT MAX(id_pseudo) FROM ".$table1);
$dernier_membre_a = mysql_fetch_row($req_dernier_membre_a);
$req_dernier_membre_b = mysql_query("SELECT pseudo FROM ".$table1." WHERE id_pseudo='".$dernier_membre_a[0]."'" );//".$dernier_membre_a[0]."
$dernier_membre = mysql_fetch_row($req_dernier_membre_b);
 
Elle a pour but de récupère le dernier inscrit
Mais je trouve cette requete un peu lourde a mes yeux :D et je pense bien qu'on peu faite plus simple...
Est-il possible d'optimiser cette requete?
Peut-on imbriquer plusieurs SELECT dans une requete?
 
J'ai essayé ceci mais ca marche pas :
 
$dernier_membre = mysql_query("SELECT pseudo FROM ".$table1." WHERE id_pseudo = 'SELECT MAX(id_pseudo) FROM utilisateur'" );
$dernier_membre = mysql_fetch_row($dernier_membre);
 
Merci de m'éclairecir ;)


Message édité par cvex le 03-02-2005 à 00:03:32

---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 02-02-2005 à 19:54:09   

Reply

Marsh Posté le 02-02-2005 à 20:31:00    

Je vais sûrement dire une connerie, mais pourquoi ne pas utiliser order by et limit si tout ce que tu veux c'est récupérer le max d'une table ?

Reply

Marsh Posté le 02-02-2005 à 20:35:24    

cvex a écrit :

Bonsoir à tous!
 
Je desire optimiser cette requete :
 
$req_dernier_membre_a = mysql_query("SELECT MAX(id_pseudo) FROM ".$table1);
$dernier_membre_a = mysql_fetch_row($req_dernier_membre_a);
$req_dernier_membre_b = mysql_query("SELECT pseudo FROM ".$table1." WHERE id_pseudo='".$dernier_membre_a[0]."'" );//".$dernier_membre_a[0]."
$dernier_membre = mysql_fetch_row($req_dernier_membre_b);
 
Elle a pour but de récupère le dernier inscrit
Mais je trouve cette requete un peu lourde a mes yeux :D et je pense bien qu'on peu faite plus simple...
Est-il possible d'optimiser cette requete?
Peut-on imbriquer plusieurs SELECT dans une requete?
 
J'ai essayé ceci mais ca marche pas :
 
$dernier_membre = mysql_query("SELECT pseudo FROM ".$table1." WHERE id_pseudo = 'SELECT MAX(id_pseudo) FROM utilisateur'" );
$dernier_membre = mysql_fetch_row($dernier_membre);
 
Merci de m'éclairecir ;)


 
Les requettes dans une requette fonctionne pas sur toute les version de Mysql.
SELECT pseudo FROM $table1 ORDER BY DESC id_pseudo LIMIT 0,1
essais ça.

Reply

Marsh Posté le 02-02-2005 à 21:44:59    

naceroth a écrit :

Je vais sûrement dire une connerie, mais pourquoi ne pas utiliser order by et limit si tout ce que tu veux c'est récupérer le max d'une table ?


 
oui je veux juste récupérer le max d'une table
 
berceker united => La requete me fait une erreur


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 02-02-2005 à 21:48:41    

naceroth a écrit :

Je vais sûrement dire une connerie, mais pourquoi ne pas utiliser order by et limit si tout ce que tu veux c'est récupérer le max d'une table ?

Trop gros, passera pas [:kurrupt]  


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 02-02-2005 à 21:49:36    

SELECT pseudo FROM $table1 ORDER BY DESC id_pseudo LIMIT 1
ça suffit


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 02-02-2005 à 21:50:44    

cvex a écrit :

oui je veux juste récupérer le max d'une table
 
berceker united => La requete me fait une erreur

L'erreur en détail ?


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 02-02-2005 à 21:55:32    

ba oui ca doi etre la requete :
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in c:\program files\wamp\www\compta_caps_v2\index.php on line 69


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 02-02-2005 à 22:04:05    

Apparament c'est le LIMIT qui pose problème mais je vois toujours pas comment l'erreur peu survenir...


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 02-02-2005 à 22:10:34    

Rien à voir avec une erreur SQL, c'est toi qui a mal dû gérer le code php. Poste le code qui donne l'erreur.


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 02-02-2005 à 22:10:34   

Reply

Marsh Posté le 02-02-2005 à 22:59:50    

$dernier_membre = mysql_query("SELECT pseudo FROM $table1 ORDER BY DESC id_pseudo LIMIT 1" );
$dernier_membre = mysql_fetch_row($dernier_membre);
echo $dernier_membre[0];


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 02-02-2005 à 23:07:15    

La variable de requête est réinitialisé par le mysql_fetch_row. Ce n'est donc plus un résultat SQL. Change le nom de la variable.
A mon avis, ça peut être que ça.


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 02-02-2005 à 23:52:57    

Master p a écrit :

La variable de requête est réinitialisé par le mysql_fetch_row. Ce n'est donc plus un résultat SQL. Change le nom de la variable.
A mon avis, ça peut être que ça.


 
N'importe quoi.
 
C'est surtout que le DESC est supposé se trouver derrière le nom du champs de la clause order, et pas avant...

Reply

Marsh Posté le 03-02-2005 à 00:03:13    

gg naceroth c'était ca! :)
LOL merci beaucoup :)


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le 03-02-2005 à 00:05:40    

naceroth a écrit :

N'importe quoi.
 
C'est surtout que le DESC est supposé se trouver derrière le nom du champs de la clause order, et pas avant...

[:rofl] trop con
J'y ai pensé, mais je me suis dit que ça sortirait une erreur SQL, oubliant qu'il faisait pas un die avec le mysql_query.
Je retourne me pendre dans ma chambre...


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 03-02-2005 à 02:11:27    

Oui exacte c'est ainsi.
SELECT pseudo FROM $table1 ORDER BY  id_pseudo DESC LIMIT 0,1  
 
Pour afficher les erreur Mysql il faut faire un echo mysql_error(); apres le query.

Reply

Marsh Posté le 03-02-2005 à 09:46:20    

berceker united a écrit :

Oui exacte c'est ainsi.
SELECT pseudo FROM $table1 ORDER BY  id_pseudo DESC LIMIT 0,1  
 
Pour afficher les erreur Mysql il faut faire un echo mysql_error(); apres le query.

Code :
  1. $sql = SELECT pseudo FROM $table1 ORDER BY id_pseudo DESC LIMIT 1';
  2. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

Je trouve ça plus propre


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 03-02-2005 à 12:54:35    

Master p a écrit :

Code :
  1. $sql = SELECT pseudo FROM $table1 ORDER BY id_pseudo DESC LIMIT 1';
  2. $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

Je trouve ça plus propre


Pour le développement tu peux affichier cela mais lorsque que tu placeras cela en ligne évite d'afficher des erreurs tu rediriges les erreurs dans un fichier de log.

Reply

Marsh Posté le 03-02-2005 à 14:06:46    

Quand je mets en ligne, y a plus d'erreurs  [:jagstang]


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 03-02-2005 à 18:55:03    

Master p a écrit :

Quand je mets en ligne, y a plus d'erreurs  [:jagstang]


donc tu peux retirer le or die

Reply

Marsh Posté le 03-02-2005 à 19:39:01    

LOL ;) ok merci beaucoup :)


---------------
http://forum.hardware.fr/hardwaref [...] 1293-1.htm
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed