2009-05-13 7 views
0

Y at-il une autre façon de faire cette requête?MySQL situation de double requête

$query = "SELECT * FROM produto, pt WHERE 
     produto.refPT = pt.ref AND 
     produto.refPT IN (SELECT idProduto FROM amb_prod WHERE idAmbiente='1');"; 
    $result_set = mysql_query($query); 

Le problème est mon localhost ont la version MySQL 5.1.30 communautaire, mais mon serveur en ligne ont la version MySQL 5.0.67 communautaire.

Et je pense est que la raison pour laquelle je reçois cette erreur que lorsque je tente d'exécuter sur le serveur en ligne:

mysql_fetch_array(): supplied argument is not a valid MySQL result resource 
+0

Vérifiez la sortie mysql_error(), qui contiendra probablement suffisamment d'informations pour travailler sur quel aspect de la requête est incorrecte ou incompatible avec la version en cours d'exécution dans la production. – Rob

+0

Avez-vous vérifié cette requête avec des clients? (Ex: phpMyAdmin) – NinethSense

+0

Merci NinethSense problème résolu, la version 5.1.30 n'a pas renvoyé l'erreur beacuse il est insensible à la casse. – Bonfocchi

Répondre

1

Il fait vivre plus facile lorsque vous créez une belle vue de votre requête, comme:

$query = "SELECT * 
      FROM produto, pt, amb_prod 
      WHERE produto.refPT = pt.ref 
      AND produto.refPT = amb_prod.idProduto 
      WHERE amb_prod.idAmbiente='1';"; 
$result_set = mysql_query($query); 
+0

Ce qui est avec toutes les réponses en double? C'est # 3 qui dit exactement la chose. Êtes-vous en train de corriger le formatage, ce qui n'est pas pertinent (aussi, je pensais que vous parliez de vues mysql)? –

0
bien

, il serait beaucoup de sens d'installer une version correspondante de MySQL sur vos systèmes de test, de sorte que vous pouvez déboguer l'erreur plus facilement.

Vous pouvez également essayer quelque chose comme ça ...

$query = "SELECT * FROM produto, pt, amb_prod WHERE 
    produto.refPT = pt.ref AND 
    produto.refPT = amb_prod.idProduto WHERE amb_prod.idAmbiente='1');"; 
$result_set = mysql_query($query); 
+0

Votre requête contient 2 mots-clés WHERE. Remplacer le dernier avec AND. En outre, un supplément) –

0

Au moins pour simplifier votre requête, vous pouvez aller avec:

"Select * from produto,pt,amb_prod WHERE 
     produto.refPT = pt.ref AND 
     produto.refPT=amb_prod.idproduto AND 
     amb_prod.idAmbiente='1';" 

Bien que je vous recommande de sélectionner les champs plutôt que " * ". Je dois aussi me demander pourquoi vous citez le '1', n'est-ce pas un champ numérique?

0

Débarrassez-vous des demi-points à la fin et voir si cela aide.

Sur certaines implémentations de pont (la chose qui relie votre langue au serveur MySQL), votre chaîne de requête est en fait deux requêtes:

SELECT * 
FROM produto, pt 
WHERE 
produto.refPT = pt.ref AND 
produto.refPT IN (SELECT idProduto 
        FROM amb_prod 
        WHERE idAmbiente='1') 

Et ...

[Blank] 

Certains ponts peuvent se confondre à la fois sur lequel jeu de résultats à retourner (le résultat de la requête SQL ou la requête en blanc) et de savoir si une requête en blanc est acceptable ou non.