Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1769 connectés 

  FORUM HardWare.fr
  Programmation

  [MySQL] j'arrive pas à faire une requête ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] j'arrive pas à faire une requête ...

n°122814
z0rglub
Posté le 07-04-2002 à 16:08:49  profilanswer
 

:hello:  
je n'arrive pas à récupérer les infos en une seule requête.
Voici les champs (intéressants) de la table incriminée :

Code :
  1. post_id  topic_id  forum_id  post_time
  2. 1        1         6         980497583
  3. 2        1         6         980542050
  4. 3        1         6         980704070
  5. 4        2         6         980769962
  6. 5        3         6         982425368
  7. ....


je voudrais en une seule requête récupérer le post_id du plus grand post_time donné pour un topic_id donné.
voilà ce que j'utilisais :

Code :
  1. select max(post_time), post_id
  2. from phpbb_posts
  3. where topic_id = '1'
  4. and forum_id = '6'
  5. group by topic_id


 
ce qui me donne le post_time maximum (ça c cool) mais pas le post_id correspondant, mais le premier trouvé correspondant au bon topic_id et forum_id.
 
(j'ai trouvé une solution bien sûr, en faisant 2 requêtes successives, mais j'aimerais comprendre pourkoi celle-ci marche pas)

 

[jfdsdjhfuetppo]--Message édité par z0rglub--[/jfdsdjhfuetppo]


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
mood
Publicité
Posté le 07-04-2002 à 16:08:49  profilanswer
 

n°122825
darklord
You're welcome
Posté le 07-04-2002 à 16:37:33  profilanswer
 

euh,
 
essaie

Code :
  1. select post_id
  2. from phpbb_posts
  3. where topic_id = "1"
  4. and post_time = (select max(pos_time)
  5.                  from phpbb_posts
  6.                  where topic_id = "1" ));


---------------
Just because you feel good does not make you right
n°122826
darklord
You're welcome
Posté le 07-04-2002 à 16:39:09  profilanswer
 

je crois que ca devrait marcher mais ca ne doit pas etre la solution la plus efficace en termes de perf...


---------------
Just because you feel good does not make you right
n°122827
z0rglub
Posté le 07-04-2002 à 16:40:07  profilanswer
 

DarkLord a écrit a écrit :

je crois que ca devrait marcher mais ca ne doit pas etre la solution la plus efficace en termes de perf...  




 
j'essaie même pas, pas parce que c'est toi :) mais parce que MySQL (SGBD assez rudimentaire) ne supporte pas les select imbriqués


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122828
Cherrytree
cn=?
Posté le 07-04-2002 à 16:41:06  profilanswer
 

z0rglub a écrit a écrit :

 
 
j'essaie même pas, pas parce que c'est toi :) mais parce que MySQL (SGBD assez rudimentaire) ne supporte pas les select imbriqués  



Ah bon ?

n°122829
z0rglub
Posté le 07-04-2002 à 16:41:48  profilanswer
 

vous semez le doute dans mon esprit tout à coup, je vais essayer


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122831
Cherrytree
cn=?
Posté le 07-04-2002 à 16:42:26  profilanswer
 

z0rglub a écrit a écrit :

vous semez le doute dans mon esprit tout à coup, je vais essayer  



MySQL est une base de données simple, mais pas simpliste !

n°122832
z0rglub
Posté le 07-04-2002 à 16:43:49  profilanswer
 

Code :
  1. requête SQL : 
  2. select post_id
  3. from phpbb_posts
  4. where topic_id = '1'
  5. and forum_id = '6'
  6. and post_time in (select max(post_time)
  7.                 from phpbb_posts
  8.                 where topic_id = '1')) LIMIT 0, 30
  9. MySQL a répondu:
  10. Something is wrong in your syntax près de 'select max(post_time)
  11.                 from phpbb_posts
  12.        ' à la ligne 5


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122833
darklord
You're welcome
Posté le 07-04-2002 à 16:44:24  profilanswer
 

z0rglub a écrit a écrit :

 
 
j'essaie même pas, pas parce que c'est toi :) mais parce que MySQL (SGBD assez rudimentaire) ne supporte pas les select imbriqués  




 
bin je ne sais pas si tu peux le faire en une seule requete alors (sans select imbriqués je veux dire). Et ca m'étonnerait que MySQL ne sache pas faire ca ...


---------------
Just because you feel good does not make you right
n°122834
z0rglub
Posté le 07-04-2002 à 16:45:10  profilanswer
 

Cherrytree a écrit a écrit :

MySQL est une base de données simple, mais pas simpliste !  




 
tu as déjà réussi à faire des select imbriqués ? parce que si oui, dis moi comment... ça m'intéresserai pas mal


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
mood
Publicité
Posté le 07-04-2002 à 16:45:10  profilanswer
 

n°122835
darklord
You're welcome
Posté le 07-04-2002 à 16:45:19  profilanswer
 

j'ai mis une paranthèse de trop aussi


---------------
Just because you feel good does not make you right
n°122837
darklord
You're welcome
Posté le 07-04-2002 à 16:47:18  profilanswer
 

tu es sur de ton select max ... IN  ???


---------------
Just because you feel good does not make you right
n°122838
Cherrytree
cn=?
Posté le 07-04-2002 à 16:48:00  profilanswer
 

Les SELECT imbriqués, je les ai pratiqué sous DB2, mais comme c'est du SQL de base, je ne vois pas ce qui empêcherait de le faire sous MySQL. Par contre, ma dernière requête remonte à loin. J'ai pas trop le temps now. Sorry !

n°122839
z0rglub
Posté le 07-04-2002 à 16:49:15  profilanswer
 

(on dirait bla bla...)
j'ai mis '=' marchait pas puis 'IN' (souvenir de mes cours de SQL) et marche pas non plus (avec ou sans la parenthèse de trop)


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122840
z0rglub
Posté le 07-04-2002 à 16:51:29  profilanswer
 

ouais, franchement ah moins qu'on arrive à me prouver le contraire (et vu que j'utilise MySQL depuis 1 an) je continue à penser que MySQL ne gère pas les select imbriqués


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122844
darklord
You're welcome
Posté le 07-04-2002 à 16:58:26  profilanswer
 

Citation :


MySQL Server currently only supports nested queries of the form INSERT ... SELECT ... and REPLACE ... SELECT .... You can however use the function IN() in other contexts. Sub-selects are scheduled for implementation in Version 4.x.  
 
Meanwhile, you can often rewrite the query without a sub-select:  
 
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
 
This can be re-written as:  
 
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
 
The queries:  
 
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2
                                       WHERE table1.id=table2.id);
 
Can be rewritten as:  
 
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id
                                       WHERE table2.id IS NULL;
 
For more complicated subqueries you can often create temporary tables to hold the subquery. In some cases, however this option will not work. The most frequently encountered of these cases arises with DELETE statements, for which standard SQL does not support joins (except in sub-selects). For this situation there are two options available until subqueries are supported by MySQL Server.  
 
The first option is to use a procedural programming language (such as Perl or PHP) to submit a SELECT query to obtain the primary keys for the records to be deleted, and then use these values to construct the DELETE statement (DELETE FROM ... WHERE ... IN (key1, key2, ...)).  
 
The second option is to use interactive SQL to construct a set of DELETE statements automatically, using the MySQL extension CONCAT() (in lieu of the standard || operator). For example:  
 
SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';';)
  FROM tab1, tab2
 WHERE tab1.col1 = tab2.col2;
 
You can place this query in a script file and redirect input from it to the mysql command-line interpreter, piping its output back to a second instance of the interpreter:  
 
shell> mysql --skip-column-names mydb < myscript.sql | mysql mydb
 
MySQL Server 4.0 supports multi-table deletes that can be used to efficiently delete rows based on information from one table or even from many tables at the same time.  


 
http://www.mysql.com/documentation [...] index.html


---------------
Just because you feel good does not make you right
n°122846
z0rglub
Posté le 07-04-2002 à 17:02:17  profilanswer
 

thx pour la doc, ça confirme ce que je pensais, pas de select imbriqués.... faut trouver des astuces avec des jointures quand c'est possible


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122857
Dost67
Posté le 07-04-2002 à 17:34:09  profilanswer
 

Putain il a quoi là le foum, il déconne ?????
 
En tout cas voici l'adresse d'un de mes posts où j'ai résolu un pb d'imbrication avec MySQL :
http://forum.hardware.fr/forum2.ph [...] =1&trash=0
Je sais pas si ça va te servir mais regarde quand même.

n°122859
z0rglub
Posté le 07-04-2002 à 17:40:06  profilanswer
 

mais que je suis con, j'avais déjà utilisé cette ruse de sioux (le order by + limit 0,1). C'est vraiment ce qu'on appelle une ruse, mais bon, MySQL ne permet pas de faire mieux, en tout cas, merci pour ce petit rafraichissement de mémoire


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122862
z0rglub
Posté le 07-04-2002 à 17:42:51  profilanswer
 

je laisse pas en plan ceux qui ont pas tout compris, voilà le code à mettre :

Code :
  1. select post_id, post_time
  2. from phpbb_posts
  3. where topic_id = '1'
  4. and forum_id = '6'
  5. order by post_time desc
  6. limit 0,1


 
qui me retourne ce que je veux :

Code :
  1. post_id  post_time 
  2. 11       988374027

 

[jfdsdjhfuetppo]--Message édité par z0rglub--[/jfdsdjhfuetppo]


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
n°122871
Dost67
Posté le 07-04-2002 à 17:49:17  profilanswer
 

Eh bien finalement ça t'a aidé...

 

[jfdsdjhfuetppo]--Message édité par Dost67--[/jfdsdjhfuetppo]

n°122873
Cherrytree
cn=?
Posté le 07-04-2002 à 17:54:09  profilanswer
 

J'en reviens toujours pas qu'il soit impossible de faire des requêtes imbriquées :sweat:

n°122874
z0rglub
Posté le 07-04-2002 à 17:56:27  profilanswer
 

et oui, moi aussi quand je m'en suis rendu compte gt sur le cul


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [MySQL] j'arrive pas à faire une requête ...

 

Sujets relatifs
[MySQL Pb] Found xx parts Should be: 0 parts[mysql] trier avec mysqladmin
Connexion à MySQL sur FreeMYSQL - l'id d'une insertion dans une table
MySql, mise en ligne?MySQL...
[MySQL] historiser mes enregistrements ?erreur au lancement de mysql
mysql sur free, 2 questionsPHP + MYSQL >> ADMINISTRATION GRAPHIQUE
Plus de sujets relatifs à : [MySQL] j'arrive pas à faire une requête ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR