2017-02-25 2 views
0

J'ai un fichier php qui génère une mise en page de boutique en ligne. Le problème est quand j'ai commencé à diviser les produits en pages. J'ai la requête suivante qui s'exécute dans la base de données de produits où chaque type de produit peut être trouvé. Il existe une colonne prodducttype qui spécifie sous quel menu elle doit être affichée. La requêteRequête MySql avec limite montrant un élément de moins

$sql = "SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = '".$GLOBALS["useableproductid"]."' LIMIT ".($start- 1).",".$stop; 

Il y a une ligne qui manque toujours I écho utilisé pour afficher la requête juste avant de l'exécuter son suivantes:

SELECT id,descr, nm, img, price FROM c1640644.products WHERE 
producttype = 'laptop' LIMIT 0,8 

En bref sur la base de données: Actuellement 3 types de produits ordinateurs portables, écouteurs, ordinateurs de bureau. Lors de l'affichage des ordinateurs portables, ils sont de l'ID 1- 17 et ID = 1 est manquant. Les écouteurs des ID 18-22 et ID = 21 sont manquants. Les bureaux des ID 23-27 et ID = 23 sont manquants. Toujours les mêmes produits manquent.

La méthode d'affichage est:

while($row = $result->fetch_assoc()){ 
echo $row["nm"]; //just an example echo in the code it gets displayed with design 
    ... 
} 

Merci pour toutes les réponses!

+2

Notez que LIMIT sans ORDER BY est assez insignifiant, et les tables avec des noms comme c1640644 sont souvent symptomatiques d'une mauvaise conception – Strawberry

+0

Je vais faire la commande merci! Le c1640644 est parce que c'est un serveur d'université où c1640644 est mon numéro d'étudiant. –

+0

Ah, juste assez – Strawberry

Répondre

1

L'explication la plus raisonnable du comportement observé (ligne "manquante" pour 'laptop' et une ligne "manquante" pour 'headphone') est que les lignes ne satisfont pas le prédicat, la comparaison d'égalité au type de produit. (Cela suppose qu'il ya moins de lignes $stop-$start est retourné.

je aimerais vérifier les valeurs de Producttype.

SELECT producttype, COUNT(1) 
    FROM c1640644.products 
GROUP BY producttype 
ORDER BY producttype 

Le décompte est revenu égal au nombre de lignes que vous attendez à retourner? Dans en particulier, je cherche des valeurs qui sont visuellement proche de « ordinateur portable », mais ne satisferait pas à un match d'égalité, comme 'laptop ultra-portable' ou 'lapt0p'. Ces valeurs ne satisferaient pas une comparaison d'égalité à 'laptop'.


Sans clause ORDER BY, MySQL est libre de renvoyer des lignes dans n'importe quel ordre. Le résultat de la requête avec la clause LIMIT est indéterminé. Il est possible qu'une requête avec LIMIT 0,8 et LIMIT 8,16 inclue la même ligne. Il est également possible qu'une ligne soit "ignorée".

Si le cas est qu'il y a toujours "une ligne manquante", je me méfie qu'il y ait un fetch avant la boucle while. La boucle affichée dans la question semble correcte. Il est également possible que la colonne nm contienne une chaîne vide, ce qui donne l'impression qu'une ligne est "ignorée". Pour déboguer cela, pensez à inclure echo "row fetched"; comme première ligne à l'intérieur de la boucle. Ou l'initialisation d'une variable de compteur avant la boucle $i=0;, puis à l'intérieur de la boucle, incrémenter $i et inclure $i dans la chaîne que dans la sortie de débogage.