8797 sujets

Développement web côté serveur, CMS

Bonsoir, j'ai un petit soucis. J'ai fais le while ci-dessous, et je voudrais qu'au début de la liste des objets de type 2, et de type 3 ca affiche un titre.


Exemple :

Titre type 2
1
2
3

Titre type 3

4
6
8



Donc j'ai fais comme ceci, et ca fonctionne, mais je me demande si il y a pas plus simple :

$query = doquery("SELECT id, type FROM {{table}} WHERE id='1' OR id='12'  OR id='4'  OR id='6' OR id='10'", "items");   

$list1 = '';
$list2 = '';
$titre1 = '';
$titre2 = '';

while ($queryrow = mysql_fetch_array($query)) {

if($queryrow['type'] == 2){

$titre1 = 'Titre type 2'; //titre pour les type 2
$list1 = $queryrow['id'].'<br />';
}

if($queryrow['type'] == 3){

$titre2 = 'Titre type 3'; //titre pour les type 3
$list2 = $queryrow['id'].'<br />';
}

}

echo $titre1.$list1.$titre2.$list2;  //affichage

Modifié par sff (27 Mar 2008 - 22:08)
Salut,

A premiere vu je ne voit pas comment tu pourrai optimiser ta boucle, sachant que généralement on cherche le moyen afin de trouver le plus rapidement possible le résultat voulu. Dans ton cas tu parcours chaque élément de ta BDD qu'une fois donc aucun parcour inutile en vu.

A la limite si se n'est que de l'affichage tu pourrai affiche au fur et a mesure que ta boucle tourne.

voilou ++
Salut sff Smiley cligne ,

Hem... en fait je ne comprends pas bien ton code (d'où viennent les id 1, 12, etc. de ta requête ? D'une sélection en amont ? Il n'y a que les types 2 et 3 à sélectionner ou tu peux en avoir d'autres ?), ni comment ce code pourrait afficher ce que tu veux Smiley rolleyes ? Si par exemple les id 1 et 4 ont un type 2 et l'id 6 un type 3, il me semble bien qu'au final tu auras quelque chose comme :
a écrit :
Titre type 24
Titre type 36

Quoi qu'il en soit, si je devais "optimiser" ton code je m'y prendrais comme ça :
<?php
$types = array(2, 3); // types à sélectionner
$types_selected = implode(", ", $types);
$ids = array(1, 12, 4, 6, 10); // ids à sélectionner
$ids_selected = implode(", ", $ids);
$titre = array( // libellés titres
	1 => 'Titre type 1',
	2 => 'Titre type 2',
	3 => 'Titre type 3',
	4 => 'Titre type 4'
);
$sql = "SELECT id, type FROM {{table}} WHERE id IN (".$ids_selected.") AND type IN (".$types_selected.") ORDER BY type";
$query = doquery($sql, "items");
$titre_en_cours = 0;
while ($queryrow = mysql_fetch_array($query)) {
	if ($titre_en_cours != $queryrow['type']) { // rupture type ?
		$titre_en_cours = $queryrow['type'];
		echo '<h3>'.$titre[$titre_en_cours].'</h3>';
	}
	echo $queryrow['id'].'<br />';
}
?>

A+
Modifié par Heyoan (28 Mar 2008 - 01:03)