Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592

    ottimizzazione query, ovvero una query invece di 2

    Scusate il titolo ma davvero non sapevo come chiamare questa discussione..

    il mio "problema" in questo momento è questo:
    ho un libro, diviso in capitoli.
    1
    2
    3
    4 eccetera. e questo è un campo nel DB.
    Poi ho i paragrafi
    1.1
    1.2
    1.3
    1.4
    2.1
    2.2 eccetera. e questo è un altro campo nel DB.

    con due query
    select * from libro where capitolo = '$cap'
    e
    select * from libro where capitolo != '$cap'
    mi carico tutti i dati correttamente. nel primo caso mi carica un menu con le voci dei paragrafi "esplose", perchè seono nel capitolo ($cap) in questione. nell'altro caso mi carica solo i titoli dei capitoli.

    La domanda è questa..
    volevo sapere se fosse possibile ottimizzare il tutto con una sola query.. stanotte provavo con le subquery, ma devo dire che non ho trovato soluzioni applicative..
    praticamente dovrebbe caricarmi sempre come prima voce il menu esploso, e sotto la lista dei titoli dei capitoli non esplosi... con una query però, con due l'ho fatto da solo ed è easy..

    so che non è facile farsi capire, ci ho messo più di mezz'ora a scrivere questo 3D..

    grazie a chiunque possa darmi una mano.

  2. #2
    Posta la struttura della tabella, dei dati di esempio e l'output che desideri ottenere.

  3. #3
    Non ho capito molto bene: cosa sarebbe $cap? Puoi postare anche TUTTO il codice scritto fin ora?


  4. #4
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    ..lo sto preparando perchè è un po' lungo..

  5. #5
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    hai ragione..
    id capitolo paragrafo titoloparagrafo
    1 1 1.1 roba dell'altro mondo
    2 1 1.1 roba di questo mondo
    3 2 2.1 roba di questo pianeta
    4 2 2.2 roba di un altro pianeta
    5 3 3.1 roba dalla luna

    Codice PHP:
    //questa select mi seleziona e stampa i paragrafi del capitolo
    SELECT * FROM libro WHERE capitolo = '$cap' ORDER BY id ASC

    //questa select mi da tutti i capitoli a prescindere
    SELECT distinct (capitolo), titoloparagrafo, id FROM libro WHERE titoloparagrafo is not null ORDER BY id ASC

    //poi i risultati
     do { 
     if($capitolo == $cap ) { >
     <tr>
                <td >Capitolo <?php echo $row_Menu['capitolo']; ?></td>
    </tr>            

    <?php  do { ?>
     <tr>
    <td >[url="#<?php echo $row_Menu['id']; ?>"]<?php echo $row_Menu['titoloparagrafo']; ?>[/url]</td>
       </tr>
      <?php } while ($row_Menu mysql_fetch_assoc($Menu)); ?>
         <?php } else { ?>
         <tr>
                <td>[url="?cap=<?php echo $row_Capitoli['capitolo']; ?>"]Capitolo <?php echo $row_Capitoli['capitolo']; ?>[/url]</td>
            </tr>
         <?php ?>

     } while ($row_Capitoli = mysql_fetch_assoc($Capitoli));
    l'output:
    se $cap = 2
    mi stampa:
    capitolo 1 - con il link relativo

    capitolo 2
    roba di questo pianeta
    roba di un altro pianeta

    capitolo 3 - con il link relativo
    capitolo 4 - con il link relativo

    invece vorrei stampasse:

    capitolo 2
    roba di questo pianeta
    roba di un altro pianeta

    capitolo 1 - con il link relativo
    capitolo 3 - con il link relativo
    capitolo 4 - con il link relativo

    o al massimo con la ripetizione
    capitolo 2
    roba di questo pianeta
    roba di un altro pianeta

    capitolo 1 - con il link relativo
    capitolo 2 - con il link relativo
    capitolo 3 - con il link relativo
    capitolo 4 - con il link relativo

    se si può fare con una query, ovviamente sarebbe il massimo..
    grazie della pazienza..

  6. #6
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    ..niente? mi tengo le 2 query?

  7. #7
    Esegui una sola query, estrai tutti i valori, inserisci in due array diversi a seconda di $cap e poi usa gli array per generare l'HTML.

  8. #8
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    non sono esperto di array.. davvero non mi entrano in testa..
    ho provato così:
    Codice PHP:
    // $cap è il capitolo
    $cap $_GET['cap']; 

    $query mysql_query("SELECT * FROM libro ORDER BY id ASC");
    mysql_data_seek($query,$cap);
    $row=mysql_fetch_row($query);
    echo 
    $row[0]; 
    così mi stampa l'id..
    non riesco ad andare avanti..
    sto sbagliando strada?

  9. #9
    cestina mysql_data_seek

    devi usare un mysql_fetch_* (personalmente lavoro con gli oggetti, ma anche la funzione che ritorna l'array associativo va pure bene, ergo mysql_fetch_assoc) ed un ciclo while

    http://it.php.net/mysql_fetch_assoc

    codice:
    while($row = mysql_fetch_assoc($query))
    {
    ... fai quello che devi fare con $row ...
    }

  10. #10
    Utente di HTML.it L'avatar di telegio
    Registrato dal
    Sep 2001
    Messaggi
    2,592
    non so se hai letto quello che mi serve..
    nell'esempio sotto l'ho usato ma mi serve una cosa particolare e davvero non saprei come fare..

    grazie lo stesso..

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 © 2025 vBulletin Solutions, Inc. All rights reserved.