Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181

    Questo è un brutto ordinamento

    Salve,
    secondo me è abbastanza brutta cosa:
    -invio una query al database che mi restituisce tutte le righe book=$book
    -faccio un fetch_assoc
    -devo ordinare questo array multidimensionale in base all'oggetto Category
    -successivamente ogni category deve essere ordinata per posizione

    L'ordine delle category lo estraggo da un file,invece quello della posizione dal database
    Questo è database:
    codice:
    CREATE TABLE IF NOT EXISTS `papier_book` (
      `id` bigint(11) NOT NULL AUTO_INCREMENT,
      `book` varchar(255) NOT NULL,
      `title` varchar(255) NOT NULL,
      `price` decimal(10,2) NOT NULL default 00.00,
      `image` varchar(100) DEFAULT null,
      `description` varchar(1500) DEFAULT null,
      `category` varchar(100) NOT NULL,
      `position` int(5) NOT NULL DEFAULT 0,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=42 ;
    Qualcuno sa darmi una mano?

    Inoltre secondo voi passarla come json attravarso ajax è la morte?

    Grazie

  2. #2
    Se l'ordine delle category non è alfabetico credo che il problema non possa essere risolto semplicemente in SQL.
    Forse ti conviene effettuare una SELECT ordinata per category e position:

    codice:
    SELECT * FROM papier_book ORDER BY category, position
    e successivamente ordinare a codice per category magari appoggiandoti ad un array.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181
    Il problema è che l'ordine delle category si trova su un file esterno al database e contiene il nome delle categorie in ordine di visualizzazione,che non è detto sia quello alfabetico,quindi credo che l'order by dell'indice category non sia corretto.
    Tuttavia se ordino tramite query la posizione dopo non c'è un modo per stampare prima una category poi un'altra e così via? Riesco infine ad ottenere di nuovo un array da codificare con json_encode e da spedire ad ajax?

  4. #4
    Mi sembrava di essere stato chiaro:

    Originariamente inviato da satifal
    Se l'ordine delle category non è alfabetico credo che il problema non possa essere risolto semplicemente in SQL.
    l'order by ti serve solamente per avere un resultset ordinato (in maniera ascendente o discendente) e ragruppato per categorya e position. In questo modo, scorrendo il resultset è più semplice recuperare le categorie in base all'ordinamento descritto nel file.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181
    Oops pardon, hai assolutamente ragione

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181
    Supponendo che questo sial il mio array di rirotno
    Codice PHP:
    while ($row $result->fetch_assoc()) {
        
    $rit[$i]['title']=$row['title'];
        
    $rit[$i]['price']=$row['price'];
        
    $rit[$i]['image']=$row['image'];
        
    $rit[$i]['description']=$row['description'];
        
    $rit[$i]['category']=$row['category'];
    $i++;

    e questo l'array delle category

    Codice PHP:
    $cat=new Array(0=>'padre',1=>'pio'2=>'e',0=>'io');

    Dovrei solo creare un nuovo array con un foreach? Qualcuno mi può dare una mano che non sono molto esperto?

  7. #7
    A puro titolo di esempio, da sistemare in base alle tue esigenze:

    Codice PHP:
    ...
    $query "SELECT * FROM papier_book ORDER BY category, position";
    $result mysql_query($query) or die(mysql_error());
    while(
    $record mysql_fetch_array($result)){
        
    $arr[$record['category']][] = array('title' => $record['title'], 'price' => $record['price'], 'image' => $record['image'], 'description' => $record['description'], 'category' => $record['category']);
    }

    // Array di ordinamento delle categorie
    $categories = array(=> 'Cat B'=> 'Cat C'=> 'Cat D'=> 'Cat A');

    foreach (
    $categories as $value) {
        foreach (
    $arr[$value] as $key => $val) {
            echo 
    $val['category']." - ".$val['title']." - ".$val['price']." - ".$val['image']." - ".$val['description']."
    "
    ;
        }
    }
    ... 
    Ovviamente nel DB sono presenti le categorie che ho inserito nell'array $categories.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2009
    Messaggi
    181
    Scusa se ti rompo ancora,ma funziona anche sul multidimensionale?
    Ho letto solo ora e quindi cercando un po' su internet ho messo insieme questo:
    Codice PHP:
    <?php
    require_once ('admin/dbi.php');

    if(isset(
    $_POST['act']) && $_POST['act']=='getbook'){

        
    $book=normalize_str(htmlentities(preg_replace('/\s+/','',$_POST['book']),ENT_QUOTES));
        
    $filecat='../books/'.$book.'.txt';
        
    $catlist=file($filecatFILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
        
        
    $query='SELECT `title`,`price`,`image`,`description`,`category` FROM papier_book WHERE book="$book" ORDER BY category ASC, position ASC, title ASC';
        if (
    $result $mysqli->query($query)) {
            
    $i=0;
            
    $rit=new Object();
            while (
    $row $result->fetch_assoc()) {
                
    $rit[$i]['title']=$row['title'];
                
    $rit[$i]['price']=$row['price'];
                
    $rit[$i]['image']=$row['image'];
                
    $rit[$i]['description']=$row['description'];
                
    $rit[$i]['category']=$row['category'];
                
    $i++;
            }
            
    $result->free();
            
    $count=count($catlist);
            for(
    $i=0;$i<$count;$i++){
                
    $ret=array_merge($ret,search($rit,'category',$catlist[$i]));
            }
            echo 
    json_encode($ret);
        }
        else
            echo 
    "Error: ".$mysqli->error;
    }

    function 
    search($array$key$value)
    {
        
    $results = array();
        if (
    is_array($array))
        {
            if (isset(
    $array[$key]) && $array[$key] == $value)
                
    $results[] = $array;
            foreach (
    $array as $subarray)
                
    $results array_merge($resultssearch($subarray$key$value));
        }
        return 
    $results;
    }
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.