Webmaster Hub: Plusieurs requêtes sur une seule table - Webmaster Hub

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Plusieurs requêtes sur une seule table Noter : -----

#1 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 27 octobre 2011 - 07:35

Bonjour,
Est-il possible de faire plusieurs requêtes imbriquées sur une seule table. Cela fait plusieurs jours que je suis coincé.
Voici un extrait de ma table, ces données se répétant pour X villes.
Image IPB
Avec la requête qui suit, je récupère la ville concernée par le mois (variable provenant de mon code php, dans le cas présent 'jui') et le code demandés.
$q = mysql_query("SELECT * FROM table WHERE round($mois, 0) = 16 and code=203");
while ($r1 = mysql_fetch_array($q)) {
$villetrouvee = $r1["ville"];
}

Souhaitant récupérer les autres données de cette même ville, je veux insérer (avant la fin du premier while) une seconde requête sous la forme
$q2 = mysql_query("SELECT * FROM table WHERE ville = '$villetrouvee' and code=202");
while ($r2 = mysql_fetch_array($q2)) {
$autredonnée1 = $r2['$mois'];     // devrait me récupérer 11,8
}

et ainsi de suite pour récupérer les données des autres codes avant que la première requête ne trouve d'autres villes.

J'ai essayé mais la réponse n'arrive pas et je ne veux pas bloquer les serveurs (je suis en mutualisé)

J'espère avoir été clair.
Merci

Ce message a été modifié par Alainp - 27 octobre 2011 - 08:04.

0

#2 L'utilisateur est hors-ligne   Ernestine 

  • Groupe : Fondatrice
  • Messages : 1 034
  • Inscrit(e) : 21-août 03
  • Genre:Femme

Posté 27 octobre 2011 - 10:31

Bonjour,

Soit je n'ai rien compris à ce que tu veux faire, soit tu t'y prends très mal. Parce que là, j'ai l'impression que toutes tes requêtes pourraient être réalisées en une seule.

Pourrais-tu expliquer clairement (pas la peine de copier du code) ce que tu veux faire sur cette table ?
0

#3 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 460
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 27 octobre 2011 - 11:14

$sql = sprintf("SELECT * FROM table WHERE ville IN (SELECT ville FROM table WHERE round(%s, 0) = 16 AND code=203)", mysql_real_escape_string($mois));
$resource = mysql_query($sql);


et tu as toutes les données.
_AT_Montpellier
L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent (l'homme aux initiales douteuses)
Venez tester votre niveau de compétence en PHP :-)
0

#4 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 01 novembre 2011 - 12:47

Bonjour à tous et désolé, je n'ai pas pu revenir plus tôt sur le forum

Voir le messageErnestine, le 27 octobre 2011 - 10:31, dit :

..... soit tu t'y prends très mal.

C'est exactement çà, je ne suis pas super doué dans les requêtes sql

Voir le messageSStephane, le 27 octobre 2011 - 11:14, dit :

$sql = sprintf("SELECT * FROM table WHERE ville IN (SELECT ville FROM table WHERE round(%s, 0) = 16 AND code=203)", mysql_real_escape_string($mois));
$resource = mysql_query($sql);


et tu as toutes les données.


C'est ce que je voudrai mais, compte tenu de mon faible niveau en SQL, comment j'exploite le résultat contenu dans $resource pour récupérer la donnée d'une ligne, celle d'une autre, etc... ?
Dans une requête simple, je fais echo $resource["code"]; mais là ?
Merci
0

#5 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 01 novembre 2011 - 13:19

Voir le messageErnestine, le 27 octobre 2011 - 10:31, dit :

Pourrais-tu expliquer clairement (pas la peine de copier du code) ce que tu veux faire sur cette table ?


Je vais essayer,
J'ai une table qui comprend environ 12.000 villes avec, pour chacune d'elles et mois par mois la température moyenne, le minimum, le maximum, la pluie, le vent, etc..
(Voir l'extrait dans mon premier message)
Ces données mensuelles ont un code, 203 pour la température, etc...

Mon objectif:
Afficher toutes les villes qui ont, par exemple 16 degrés de température moyenne (code 203) en juin (colonne "jui"), çà c'est facile je sais faire
Mais je voudrai aussi afficher en ligne, le minimum, le maximum, la pluie, le vent pour chaque ville affichée et pour le même mois.
Dans l'extrait précité, çà m'afficherait la série 16,9 22,1 11,8 55 73 3,4 pour juin et pour cette ville.


Vu la quantité de données il faut que cela soit le plus rapide possible
Voila, j'espère avoir décrit clairement ce que je cherche à faire.

Ce message a été modifié par Alainp - 01 novembre 2011 - 13:24.

0

#6 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 460
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 02 novembre 2011 - 11:57

$sql = sprintf("SELECT * FROM table WHERE ville IN (SELECT ville FROM table WHERE round(%s, 0) = 16 AND code=203)", mysql_real_escape_string($mois));
$resource = mysql_query($sql);


Ce n'est pas du sql apres, c'est du php, ceci t'affichera le résultat de ta requête, tu en fais ce que tu en veux :)

while($r = mysql_fetch_array($resource)){
print_r($r);
}


_AT_Montpellier
L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent (l'homme aux initiales douteuses)
Venez tester votre niveau de compétence en PHP :-)
0

#7 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 02 novembre 2011 - 12:54

Bonjour,

Voir le messageSStephane, le 02 novembre 2011 - 11:57, dit :

Ce n'est pas du sql apres, c'est du php, ceci t'affichera le résultat de ta requête, tu en fais ce que tu en veux :)


Bien sur mais je ne savais pas comment récupérer les données contenues dans $resource

Je viens de tester ce code
$sql = sprintf("SELECT * FROM table WHERE ville IN (SELECT ville FROM table WHERE round(%s, 0) = 16 AND code=203)", mysql_real_escape_string($mois)); 
$resource = mysql_query($sql);

while($r = mysql_fetch_array($resource)){ 
print_r($r); 
}

Cà me donne l'anomalie Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /...../...../www/nom_page.php on line 107
la ligne 107 est celle où il y a while($r = mysql_fetch_array($resource)){

J'ai l'impression qu'il y a un problème avec la requête imbriquée car si je mets
$sql = sprintf("SELECT ville FROM table WHERE round(%s, 0) = 30 AND code=203", mysql_real_escape_string($mois)); 

çà fonctionne, les villes s'affichent, mais dès que je remets les 2 requêtes imbriquées, j'ai la même anomalie précitée.

Ce message a été modifié par Alainp - 02 novembre 2011 - 13:36.

0

#8 L'utilisateur est hors-ligne   Ernestine 

  • Groupe : Fondatrice
  • Messages : 1 034
  • Inscrit(e) : 21-août 03
  • Genre:Femme

Posté 02 novembre 2011 - 22:11

Peut-être que la requête ne s'effectue pas correctement. Tu peux remplacer
$resource = mysql_query($sql);

par
$resource = mysql_query($sql) or die(mysql_error());

Comme ça, si une erreur s'affiche, c'est que quelque chose ne va pas (et tu sauras précisément d'où vient l'erreur).

Par ailleurs, avant de faire ta requête en php, il serait préférable que tu l'écrives directement en SQL pour la tester : c'est plus facile, et au moins, une fois que c'est fait, c'est une grosse partie du problème de résolu. Pour cela, dans phpmyadmin, tu cliques sur l'onglet SQL et tu tapes ta reqête, ce qui devrait donner :

SELECT * FROM table WHERE ville IN (SELECT ville FROM table WHERE round(juin, 0)=30 AND code=203)

Comme ça, tu verras tout de suite si ça fonctionne ou pas. Si ça fonctionne, tu verras clairement à quoi ressemble le tableau de réponse, et si ça ne fonctionne pas, le message d'erreur est en général très explicite.
0

#9 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 03 novembre 2011 - 09:33

Voir le messageErnestine, le 02 novembre 2011 - 22:11, dit :

Comme ça, tu verras tout de suite si ça fonctionne ou pas. Si ça fonctionne, tu verras clairement à quoi ressemble le tableau de réponse, et si ça ne fonctionne pas, le message d'erreur est en général très explicite.


Bonjour et merci Ernestine, c'est une excellente idée
Malheureusement, impossible de trouver l'origine du non fonctionnement

J'ai limité au maximum la requête pour tenter d'avoir un résultat mais négatif.
Voici la requête et son résultat
SELECT * FROM table WHERE ville IN(SELECT ville FROM table WHERE code = 203)
Erreur
requête SQL:  

SELECT * 
FROM table
WHERE ville
IN (


SELECT ville
FROM table
WHERE code =203
)
LIMIT 0 , 30 

MySQL a répondu: 

#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT ville FROM temp WHERE code = 203)
LIMIT 0, 30' at line 

La seule qui fonctionne c'est : SELECT ville FROM table WHERE code = 203
0

#10 L'utilisateur est hors-ligne   captain_torche 

  • Danacol / Orangina rouge
  • Voir le blog
  • Groupe : Admin
  • Messages : 6 722
  • Inscrit(e) : 08-février 06
  • Genre:Homme
  • Localisation:Savigny / Orge

Posté 03 novembre 2011 - 10:01

Quelle version de MySQL utilises-tu ? (Tu devrais voir l'info sur la page d'accueil de PHPMyAdmin).
Vous avez rêvé cette nuit ? Partagez vos rêves sur l'Onironaute !
Bijoux fantaisie
Recherche nounou
0

#11 L'utilisateur est hors-ligne   Alainp 

  • Groupe : Actif
  • Messages : 21
  • Inscrit(e) : 01-octobre 04

Posté 03 novembre 2011 - 12:43

Voir le messagecaptain_torche, le 03 novembre 2011 - 10:01, dit :

Quelle version de MySQL utilises-tu ? (Tu devrais voir l'info sur la page d'accueil de PHPMyAdmin).

Voila ce que j'ai sur la page d'accueil
Version du client MySQL: 5.0.51a

EDIT
Je crois que j'ai trouvé
Il est bien indiqué Version du client MySQL: 5.0.51a
Mais sur une autre ligne, il est également indiqué Version du serveur: 4.0.25-standard-log

J'ai regardé sur une autre base et la, c'était marqué Version du serveur: 5.0.90-log
J'ai essayé les requêtes imbriquées sur cette base et elles fonctionnent
Désolé de vous avoir fait perdre du temps.

Ce message a été modifié par Alainp - 03 novembre 2011 - 13:46.

0

#12 L'utilisateur est hors-ligne   SStephane 

  • Groupe : Fondateur
  • Messages : 460
  • Inscrit(e) : 06-février 09
  • Genre:Homme
  • Localisation:Grabels

Posté 03 novembre 2011 - 14:19

En effet, pas de requêtes imbriquées avec ta version du serveur : tu devrais upgrader, cette version n'offre vraiment que peu de fonctionnalités de sgbd moderne.
_AT_Montpellier
L'héroïsme, c'est la seule manière de devenir célèbre quand on a pas de talent (l'homme aux initiales douteuses)
Venez tester votre niveau de compétence en PHP :-)
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)