J'ai la requête MySQL suivante:requête MySQL fonctionne dans phpmyadmin, mais aucune ligne retourné en résultat PHP mis
SELECT SQL_CALC_FOUND_ROWS p.*
FROM product AS p
LEFT JOIN productCategory AS c ON FIND_IN_SET(c.id, REPLACE(TRIM(p.categories), ' ',','))
WHERE (
c.id IS NULL
OR c.status = 'D'
OR p.categories IS NULL
OR TRIM(p.categories) = ''
)
AND p.deprecated = 'N'
LIMIT 0,30
Cette requête est de ramasser des produits qui:
- a quelque chose mis à
p.categories
colonne, mais la ligne sur la tableproductCategory
n'existe pas - Avoir une
productCategory
ligne, mais l'état de la ligneproductCategory
est réglé sur « D » - Qu'il n'y ait rien défini dans le
p.categories
colonne
p.categories
est une ligne avec un espace séparé des valeurs numériques représentant ids sur la table productCategory
. Pas le meilleur design, accordé mais on m'a confié cette tâche, alors j'ai besoin d'un moyen de le faire.
Dans le code PHP, cette requête est exécutée directement après:
SELECT FOUND_ROWS() as count
Lorsqu'il est exécuté à partir phpmyadmin, je reçois des milliers de lignes retournées et quand je joins la deuxième requête, je reçois une valeur de comptage correct Nombre de rangées. Lorsque j'exécute la même première requête via mysqli_query(), je n'ai aucune ligne renvoyée et la requête suivante renvoie un nombre de 1.
Les deux phpmyadmin et mon code PHP se connectent à la même base de données.
Quelqu'un peut-il voir ce qui ne va pas ?!
Mise à jour:
Je ne veux que les 30 premières lignes retournées parce qu'il pourrait y avoir un grand nombre, dans la requête suivante, je devrais obtenir un compte de ce que total serait, SQL_CALC_FOUND_ROWS donc après la premier SELECT.
Essayez d'ajouter un point-virgule après chaque instruction. –
Lors de l'exécution de la requête via PHP, chacun est passé par mysqli_query() séparément, donc pas besoin. Dans phpmyadmin, oui, je les sépare avec un point-virgule. – berty
Sidenote: vous ne stockez pas les catégories de manière efficace, de cette façon, le moteur DB doit faire une fonction de remplacement de chaîne sur ** TOUS ** les lignes de produits. Vous devriez avoir une autre table qui stocke les relations 'post_id => category_id' ... –