2010-12-12 12 views
0

MySQLWie mache ich eine Funktion für mysql während

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; 
} 

Frage

Wie kann ich eine PHP-Funktion für das Erstellen Schleife von Kategorien? Also auf dem Formular nennen es ich nur von cat_option() und die Ergebnisse werden wie folgt aussieht auf HTML

+2

Wir bauen es nicht für Sie - was haben Sie versucht? –

+0

Welche Art von Objekt ist $ db? Wie verbinden Sie sich mit der Datenbank? – zsalzbank

+0

Ohne die optgroup ja. Ich bin fest, um es zu gruppieren – Blur

Antwort

1

Sie können es in einer einzigen Abfrage, multidimensionalen Arrays:

<?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

Danke moeffju. Wie erhält man ein dynamisches Array für 'foreach (Array ('Vehicles', 'Properties', 'Electronics') als $ label' welches es von 'cat_group' erfasst) – Blur

+1

Verwenden Sie' foreach ($ opts as $ label => $ opt) 'um über alle Schlüssel zu iterieren. – moeffju

0

die Anzahl der Elemente im Katalog Angenommen wird klein genug sein. Sie müssen zuerst alle Elemente mithilfe Ihrer SQL-Abfrage abrufen.

Dann könnten Sie diese Elemente basierend auf ihren Werten von cat_group sortieren. Auf diese Weise werden Artikel ähnlicher Kategorie zusammen angezeigt. Ich gehe davon aus, dass Sie die Sortierung auf die Objektsammlung basierend auf einem bestimmten Attribut anwenden können.

Dann müssen Sie nur die Liste durchlaufen und neue optgroup nach Bedarf erstellen.

0

Sie wahrscheinlich wollen eine DISTINCT Abfrage verwenden, um die andere Art von cat_group zuerst zu bekommen. Dann durchkreuzen Sie Ihre optgroup.

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