Aller au contenu

Plusieurs requêtes sur une seule table


Alainp

Sujets conseillés

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.

2.jpg

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

Modifié par Alainp
Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

$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.

Lien vers le commentaire
Partager sur d’autres sites

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

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

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

$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

Lien vers le commentaire
Partager sur d’autres sites

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.

Modifié par Alainp
Lien vers le commentaire
Partager sur d’autres sites

$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);
}

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

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.

Modifié par Alainp
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

Modifié par Alainp
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...