problema con funzione ordinamento dati

ciao,

ho una funzione che mi estrae in una combo le categorie.

se le ordino con ORDER BY cat_id, mi visualizza tutte le categorie, ma se le ordino BY cat_name ne perdo alcune.

per esempio, se ho categorie che vanno da A-Z, ORDER BY cat_name inizia a contarmele da C.

La query funziona, l'ho provata quindi dev'esserci qualcosa nella funzione che non va

posto il codice:

function buildCategoryOptions($catId = 0)
{
  $sql = "SELECT cat_id, cat_parent_id, cat_name
      FROM tbl_category
      ORDER BY cat_name";
  $result = dbQuery($sql);

  $categories = array();
  while($row = dbFetchArray($result)) {
    list($id, $parentId, $name) = $row;

    if ($parentId == 0) {
      // we create a new array for each top level categories
      $categories[$id] = array('name' => $name, 'children' => array());
    } else {
      // the child categories are put int the parent category's array
      $categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);
    }
  }

  // build combo box options
  $list = '';
  foreach ($categories as $key => $value) {
    $name  = $value['name'];
    $children = $value['children'];

    $list .= "<optgroup label=\"$name\">";

    foreach ($children as $child) {
      $list .= "<option value=\"{$child['id']}\"";
      if ($child['id'] == $catId) {
        $list.= " selected";
      }

      $list .= ">{$child['name']}</option>\r\n";
    }

    $list .= "</optgroup>";
  }

  return $list;
}
inviato 8 anni fa
iTek
iTek
1
X 0 X

L'errore alquanto subdolo e si verifica quando la query restituisce prima un "children" e poi il suo "parent"

Nel ciclo WHILE viene prima processato il "children" con la seguente istruzione:

$categories[$parentId]['children'][] = array('id' => $id, 'name' => $name);

successivamente viene processato il "parent" del "children" di prima, con questa istruzione:

$categories[$id] = array('name' => $name, 'children' => array());

E' chiaro che questa seconda assegnazione va a sovrascrivere la prima facendo perdere le tracce del "children"

:bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda

Domande simili