2010-07-30 18 views
3

Ok, donc celui-ci est étrange et je pense qu'il doit y avoir un problème dans ma requête SQL, mais je ne vois rien de mal à cela. Qu'est-ce qui se passe est que j'ai un script que je cours dans un script php qui récupère toutes les catégories pour lesquelles un utilisateur s'est inscrit ainsi que combien d'autres personnes se sont inscrites pour la même catégorie. Lorsque je lance la requête dans la page php, elle est très lente mais renvoie des résultats. Je voulais voir ce qui se passait alors je suis allé à phpMyAdmin pour exécuter le même script et renvoie le nombre des résultats très rapides mais me donne alors l'erreur suivante où les résultats seraient normalement affichés:Erreur dans phpmyadmin mais fonctionne bien dans le script php

#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 '' at line 1 

ici est la requête:

SELECT t1.category_id, t3.description AS 'Category', 
    t1.list_type_id, t2.name, t1.status_id, t2.user_id, 
    t2.email, UNIX_TIMESTAMP(t1.record_date) AS 'RecordDate', 
    (
     SELECT COUNT(category_id) 
     FROM t1_sub 
     WHERE t1_sub = t1.job_ctg_id AND 
      t1_sub.list_type_id = t1.list_type_id AND 
      t1_sub.status_id =44 
    ) AS 'MatchingListings' 
FROM t1 
INNER JOIN t2 ON t2.id_rfp_vendor_data = t1.user_id 
INNER JOIN t3 ON t3.type_lookup_id = t1.job_ctg_id 
WHERE t1.status_id =43 

Je suis à perte. La raison de ma question est vraiment double:

  1. Y at-il quelque chose de mal avec ma requête qui me manque?
  2. Si ce n'est pas le cas, l'erreur mysql montre-t-elle la raison pour laquelle mon script tourne lentement et que php a un moyen de contourner ce problème? (Bien que cela semble une possibilité peu probable que je dois juste demander pour être sûr)

Merci!

+0

Mmmmm ... Pouvez-vous essayer de remplacer les guillemets '' 'par des guillemets \' '? (Ou les supprimer complètement, alternativement) –

+1

+1: Pour inclure l'erreur MySQL # dans l'étiquette - Merci! –

+0

@Pekka laissez-moi essayer et voir ce qui se passe. @OMG ouais je déteste quand quelqu'un publie une question et dit qu'ils ont une erreur avec quelque chose et ils ne vous donnent pas réellement l'erreur. Comme vous êtes un lecteur d'esprit de deviner quelle erreur ils ont juste en regardant le code. Je veux dire, je suis sûr que c'est possible mais la plupart du temps ce n'est pas le cas. Fait de déclamer. : P – spinon

Répondre

1

PHPMyAdmin prend la liberté de réécrire légèrement vos requêtes (par exemple, ajoute la clause LIMIT à 0,30 montrer que les 30 premières lignes).

Pouvez-vous activer le journal des requêtes et voir quelle requête est effectivement exécutée sur le serveur?

Sinon, essayez de supprimer des éléments de la requête jusqu'à ce que cela fonctionne. Montrez-nous cette requête. Ou montrer quelques définitions de table?

+0

Dans ce cas, aucun code supplémentaire n'est ajouté car je l'ai vérifié. Laissez-moi voir à propos du journal des requêtes et voir ce que cela montre? Après cela, je vais essayer d'ajouter des définitions de table. – spinon

+0

J'ai supprimé la sous-requête count et il s'avère que c'est le problème. Mais cela semble assez basique. – spinon

+0

Ok une autre trouvaille est que si je supprime toutes les étiquettes pour les colonnes alors cela fonctionne. – spinon

0

Avez-vous des espaces dans vos noms de table ou de colonne? Si oui, les enfermer dans des contre-apostrophes:

`table name` 
+2

aucun espace. Personnellement, je me sens comme si vous avez des espaces dans votre nom de table ou de colonne, vous devriez être abattu. Encore juste mon avis cependant. : P – spinon

+0

@spinon: Je suis d'accord sur les espaces. Je ne vois rien de bizarre sur la ligne 1 sauf pour le 't1', etc. qui, je suppose, ne sont pas les vrais noms des tables. –

+0

Les noms de tables ne sont pas des mots-clés, n'est-ce pas? –

0

Ce que vous devez faire est de supprimer phpmyadmin et promettre de ne jamais le télécharger à nouveau.

Puis lancez une invite mysql en ligne de commande, et essayez la même requête. Cela vous dira si la requête est vraiment mauvaise, ou si phpmyadmin était simplement la triturer pour le plaisir perverti de ses auteurs malavisés.

+0

Je suis d'accord un jour. Bien que phpmyadmin est génial pour me laisser être paresseux. Parfois, je ne veux pas toujours travailler avec la ligne de commande. Super quand je veux ce contrôle granulaire mais pas génial quand je ne veux pas trop taper. Ce qui le vendredi @ 3 est définitivement le cas. – spinon

+0

cela m'intrigue. Qu'est-ce que vous n'aimez pas dans PHPMyAdmin? – Konerak

+0

J'ai souvent lu des histoires où les gens perdent des données ou du temps pour un dysfonctionnement de phpmyadmin; Pour moi, c'est trop risqué. Cela peut convenir pour les opérations en lecture seule. – MarkR