J'ai une table de produits avec une colonne nommée "featured" (int, 0 par défaut). Lorsque j'ajoute un produit en vedette sur la première position, il ajoute la valeur "1" dans cette colonne, "2" pour la deuxième position et ainsi de suite. . Mon problème est quand je n'ai pas un produit sur la première ou la deuxième position mais seulement sur le troisième ou le deuxième il va "promouvoir" ce troisième produit sur la première position. Existe-t-il un moyen de remplir les positions non promues (par exemple: premier ou deuxième) avec les produits de la requête de sélection par défaut et de montrer le produit vedette avec la valeur "vedette" de 3 sur la troisième position?ordre par featured - php mysql
0
A
Répondre
1
Fondamentalement, vous avez besoin de garder une trace de ce que vous avez présenté slots remplis et ceux que vous devez remplir. Vous pouvez également avoir à vous inquiéter si votre liste n'est pas assez longtemps pour que toutes vos machines à sous favorites ... Vous pouvez faire quelque chose comme:
$qh = mysql_query('SELECT featured, ... FROM products ORDER BY featured DESC');
//get the featured rows first;
while($row = mysql_fetch_assoc($qh)) {
if($row['featured'] > 0) {
$featured[$row['featured']] = $row;
} else {
break;
}
}
//values were inserted in reverse, so reorder them.
ksort($featured);
$idx = 1;
//make sure there was a next row from above while loop
if($row) {
do {
//print any featured rows that should appear at position $idx
while(isset($featured[$idx])) {
printRow($featured[$idx]);
$idx++;
}
//$idx doesn't have a featured row, so print a non-featured one
printRow($row);
$idx++;
} while($row = mysql_fetch_assoc($qh));
}
//print any remaining featured rows
foreach($featured as $key => $value) {
if($featured >= $idx) {
printRow($value);
}
}
0
En fait, c'est vraiment facile. Il suffit de faire la requête de sélection, et vous demandez également en vedette. En php, vous vérifiez le premier numéro en vedette. Si c'est plus grand que 1 alors vous sélectionnez les produits normaux à la place. Un petit exemple:
$resultsOther = array();
$result = executeQuery('SELECT featured, name, ~~ FROM products WHERE featured > 0 ORDER BY featured');
if($results[0]['featured'] > 1) {
$resultsOther = // get other products with a limit on the query
}
foreach ($resultsOther as $r) {
print_r($r);
}
foreach ($results as $r) {
print_r($r);
}
Une autre façon que vous pouvez faire est:
// This will select max 5 items and if there are not enough featured items it also selects non featured.
$results = execute('SELECT featured, ~~ FROM products ORDER BY featured DESC LIMIT 5');
while ($result = array_pop($results)) {
print_r($result); // verander deze door de functie om de producten te tonen.
}
Questions connexes
- 1. ORDRE PHP/mySQL PAR question
- 2. php mysql union ordre par
- 3. Php + MySQL bannière rotator par ordre
- 4. PHP MySQL Ordre par deux colonnes
- 5. mysql 'ordre par' problème?
- 6. bizarre ORDRE PAR Mysql
- 7. Mysql ordre complexe par
- 8. ordre aléatoire dans mysql ordre par cas
- 9. Ordre par date PHP
- 10. ordre par problème dans mysql
- 11. mysql ordre par requête numéro
- 12. Mysql Ordre de requête par
- 13. MySQL: Ordre par 2 champs
- 14. MySQL ordre par les mathématiques
- 15. Ordre mysql par données sérialisées?
- 16. ORDRE MYSQL PAR 2 colonnes
- 17. MySql 'Ordre par date' Question
- 18. MySQL Ordre par symbole Préférence
- 19. Mysql ordre limite par question
- 20. Ordre mysql par plusieurs colonnes
- 21. ORDRE MYSQL PAR CAS Problème
- 22. ORDRE PAR rompre mysql requête
- 23. ordre des mots-clés par fréquence en PHP mySql
- 24. php mysql recherche plein texte par ordre de pertinence
- 25. MySQL php - ajout de trois données et ordre par
- 26. Ordre par année avec champ Date Mysql/PHP
- 27. Tri PHP par ordre arbitraire
- 28. Ordre par facebook aime (PHP)
- 29. php mysql afficher par vues
- 30. ordre Mysql par si la condition - mauvais ordre
Vous avez le problème que vous sélectionnez tous les produits, et votre keysort fera juste la même chose que mysql orderby et O WH en vedette> 0. Pas besoin de trier cela en php imo. Aussi, je ne vois pas comment vous remplissez les lacunes avec des produits normaux? – Erik
@Erik, si j'ai un 'WHERE en vedette> 0', alors je n'aurai aucun des produits non-vedette. Certes, je pourrais être plus créatif avec le 'ORDER BY' de sorte qu'il n'est pas nécessaire de réorganiser les clés (quelque chose comme' ORDER BY featured = 0, featured'). Je comble les lacunes dans la boucle do-while. L'intérieur alors que les imprimés en vedette les gars jusqu'à ce qu'un écart est trouvé, puis j'imprime un non-vedette après le moment. Dans le cas où ce n'est pas clair, tous les index du tableau '$ featured' n'ont pas de valeur. – jswolf19
Bien sûr, ce serait plus compliqué si plusieurs éléments avaient la même valeur, mais cela n'a pas été mentionné dans la question. – jswolf19