Как я могу сделать функцию для MySQL в то время как - PullRequest
0 голосов
/ 12 декабря 2010

MySQL

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

Вопрос

Как создать функцию php для циклакатегорий?Поэтому в форме я просто называю это cat_option(), и результаты будут выглядеть так: HTML

Ответы [ 4 ]

1 голос
/ 13 июля 2011
$opts[$qa['cat_group']][$qa['cat_id']] = $qa['cat_name'];
1 голос
/ 12 декабря 2010

Вы можете сделать это в одном запросе, используя многомерные массивы:

<?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 голосов
/ 12 декабря 2010

Возможно, вы хотите использовать DISTINCT запрос, чтобы сначала получить другой тип cat_group.Затем переберите тех, кто создает ваши optgroup.

0 голосов
/ 12 декабря 2010

Предполагая, что количество элементов в каталоге будет достаточно маленьким.Сначала вы должны получить все элементы, используя ваш SQL-запрос.

Затем вы можете отсортировать эти элементы на основе их значений cat_group.Таким образом, предметы аналогичной категории будут вместе.Я предполагаю, что вы можете применить сортировку к коллекции объектов на основе определенного атрибута.

Затем все, что вам нужно сделать, - это просмотреть список и создать новую optgroup при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...