2010-12-12 23 views
0

MySQLComment puis-je faire une fonction MySQL en

cat_id cat_group cat_name  cat_status 
1  Vehicles  Cars   1 
2  Vehicles  Motorcycles 1 
3  Properties Houses   1 
4  Properties Apartments  1 
5  Electronics Cameras  1 
6  Electronics Gadgets  1 

HTML

<select id="category" name="category"> 
    <optgroup label="Vehicles"> 
     <option value="1">Cars</option> 
     <option value="2">Motorcycles</option> 
    </optgroup> 
    <optgroup label="Properties"> 
     <option value="3">Houses</option> 
     <option value="4">Apartments</option> 
    </optgroup> 
    <optgroup label="Electronics"> 
     <option value="5">Cameras</option> 
     <option value="6">Gadgets</option> 
    </optgroup>  
    </select> 

PHP

function cat_option() 
{ 
    global $db; 
} 

Question

Comment puis-je créer une fonction php pour la boucle de catégories? Ainsi, sur la forme que je viens d'appeler par cat_option() et les résultats ressemble à HTML

+2

Nous ne construisons pas pour vous - ce que vous avez essayé? –

+0

quel genre d'objet est $ db? comment vous connectez-vous à la base de données? – zsalzbank

+0

Sans le optgroup oui. Je suis coincé pour le grouper – Blur

Répondre

1

Vous pouvez le faire en une seule requête, en utilisant des tableaux multidimensionnels:

<?php 

$opts = array(); 
# select all active categories 
$qr = mysql_query('SELECT cat_id, cat_group, cat_name FROM categories WHERE cat_status = 1 ORDER BY cat_id ASC'); 
# go through all results 
while ($qa = mysql_fetch_assoc($qr)) { 
    $opts[$qa['cat_group']][$qa['cat_id']] = $qa['cat_name']; 
    # e.g. $opts['Vehicles'][1] = 'Cars' 
} 

/* 
# now your array looks like: 
$opts = array(
    'Vehicles' => array(
    1 => 'Cars', 
    2 => 'Motorcycles', 
), 
    'Properties' => array(
    3 => 'Houses', 
    4 => 'Apartments', 
), 
    'Electronics' => array(
    5 => 'Cameras', 
    6 => 'Gadgets', 
) 
); 
*/ 

?> 
<!-- now output it --> 
<select id="category" name="category"> 
<?php foreach (array('Vehicles', 'Properties', 'Electronics') as $label): ?> 
    <optgroup label="<?php echo $label ?>"> 
    <?php foreach ($opts[$label] as $id => $name): ?> 
     <option value="<?php echo $id ?>"><?php echo htmlspecialchars($name); ?></option> 
    <?php endforeach; ?> 
    </optgroup> 
<?php endforeach; ?> 
</select> 
+0

Merci moeffju. Comment obtenir le tableau dynamique pour 'foreach (array ('Vehicles', 'Properties', 'Electronics') comme $ label' qu'il capture de' cat_group' – Blur

+1

Utilisez simplement 'foreach ($ opts as $ label => $ opt) 'itérer sur toutes les touches. – moeffju

0

En supposant que le nombre d'éléments dans catalogue sera assez petit. Vous devez d'abord obtenir tous les éléments en utilisant votre requête SQL.

Ensuite, vous pouvez trier ces éléments en fonction de leurs valeurs de cat_group. De cette façon, les articles de catégorie similaire seront ensemble. Je suppose que vous pouvez appliquer le tri à la collection d'objets basée sur un attribut particulier.

Ensuite, tout ce que vous avez à faire est de parcourir la liste et de créer un nouveau groupe d'opt-ups si nécessaire.

0

Vous souhaitez probablement utiliser une requête DISTINCT pour obtenir les différents types de cat_group en premier. Puis bouclez ceux qui créent vos optgroup.

1
$opts[$qa['cat_group']][$qa['cat_id']] = $qa['cat_name'];