Trier un array et catégoriser les infos (ou requêtes multiples ?)

Trier un array et catégoriser les infos (ou requêtes multiples ?) - PHP - Programmation

Marsh Posté le 06-07-2010 à 17:35:55    

Bonjour,
 
Je tire des données d'une base de données, qui contient une ligne par produit : pomme, fraise, poivron, pomme de terre, chaque produit ayant ses caractéristiques.
 
Après la requête, j'ai un array $row qui contient :
1 => Pomme
2 => Rouge
3 => Sucrée
4 => Acide
5 => Fruit
 
1 => Fraise
2 => Rouge
3 => Sucrée
4 => Doux
5 => Fruit
 
1 => Poivron
2 => Rouge
3 => Neutre
4 => Doux
5 => Légume
 
1 => Pomme de terre
2 => Jaune
3 => Neutre
4 => Doux
5 => Féculent
 
Et je voudrais afficher les résultats par critère "5" donc faire :
Tous les fruits :
- Fraise
- Pomme
 
Tous les légumes :
- Poivron
 
Tous les féculents :
- Pomme de terre
 
Que vaut il mieux faire ? Multiplier les requêtes SQL ou trier le tableau PHP ?
Comment faire ?
 
Merci à vous !

Reply

Marsh Posté le 06-07-2010 à 17:35:55   

Reply

Marsh Posté le 06-07-2010 à 18:00:23    

Salut,
 
tout d'abord, utilise mysql_fetch_assoc plutot que mysql_fetch_rows.
Tu auras le vrai nom des colonnes plutot que des nombres.
 
Pour les tris, il suffit de modifier ta requete mysql. exemple :
 

SELECT nom,couleur,gout,type
FROM produit
WHERE type = "féculent"


 
 ;)

Reply

Marsh Posté le 06-07-2010 à 18:03:13    

Ok donc multiplier les requêtes pour ta part ?
Je voulais éviter de faire une requête par type de produit en fait, je me dit que trier un array doit être plus rapide non ?

Reply

Marsh Posté le 07-07-2010 à 00:20:04    

Sinon tu fais :


SELECT nom,couleur,gout,type
FROM produit
ORDER BY type


 
Ainsi, le tableau retourné sera déjà trié par type par mysql
 
Ensuite tu te débrouilles comme tu veux avec tes données, en fonction de la mise en page que tu veux leur donner...
 
Mais moi je ferai plusieurs requêtes séparées. Ce n'est pas significativement plus lent, tu peux choisir l'ordre d'affichage des différents types, et tu gagnes énormément en clarté (surtout si le nombre de types est amené à changer)


Message édité par Pascal le nain le 07-07-2010 à 00:21:33
Reply

Marsh Posté le 07-07-2010 à 09:01:00    

Merci mais la requête comporte un DISTINCT et une triple jointure et se fait sur 2000 lignes donc c'est du genre requête "pas mal".
Faire 5 requetes de ce type sur la même page me parait chaud.
 
Personne n'a d'idée pour afficher par critère mon array ?

Reply

Marsh Posté le 07-07-2010 à 11:21:14    

Code :
  1. <?php
  2. $ingredients = array();
  3. foreach($row as $ingredient)
  4. {
  5.     $ingredients[$ingredient[5]][] = $ingredient;
  6. }
  7. ?>



Message édité par Dj YeLL le 07-07-2010 à 11:22:27

---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 07-07-2010 à 17:56:51    

Merci mais je n'ai pas réussi avec cette méthode :(
Ca me fait bader de copier coller ma grosse requête 5 fois à la suite, surtout si un jour je dois la modifier, je devrais modifier les 5...

Reply

Marsh Posté le 07-07-2010 à 17:59:12    

?
 
Si tu as les datas telles que tu les présentes dans le premier post, je ne comprends pas pourquoi ça ne marcherait pas.


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 07-07-2010 à 18:10:39    

Je t'assure, ça m'affiche n'importe quoi.

 

Pour contrôler je fais un print_r($ingredients); on est bien ok ?


Message édité par vanquishV12 le 07-07-2010 à 18:10:50
Reply

Marsh Posté le 07-07-2010 à 18:13:43    

La chose la plus amusante est que si je remplace le 5 par n'importe quel autre chiffre, ça renvoie toujours la même chose o_Ö

Reply

Marsh Posté le 07-07-2010 à 18:13:43   

Reply

Marsh Posté le 07-07-2010 à 18:16:01    

avec PDO tu peux faire un FETCH_GROUP, ca te créer ton tableau automatiquement et sans faire de traitement derrière

Reply

Marsh Posté le 22-07-2010 à 20:42:50    

Tu peux faire ta requête avec un group by par type et ensuite faire un tri dans ton while quand tu affiche tes données.


Message édité par ryumikage le 22-07-2010 à 21:03:40
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed