Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Doppio ciclo while

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    3

    Doppio ciclo while

    Ciao a tutti!

    Ho un database con attributi id, continent, country, name
    Devo fare una ricerca delle scuole in ogni paese e vorrei che il risultato fosse una cosa del tipo:

    Italia
    istituto ciccio
    istituto pasticcio

    mentre il risultato che ottengo con un solo ciclo while è (ovviamente):

    Italia
    istituto ciccio
    Italia
    istituto pasticcio

    Per ottenere il risultato che vorrei ipotizzo ci sia bisogno di 2 cicli while annidati ma mi ritorna solamente
    Italia
    istituto ciccio

    e non la lista che vorrei.
    Il codice è questo, qualcuno mi sa dire dove sbaglio?

    <?php
    mysql_connect("xxx","xxx","xxx") or die(mysql_error());
    mysql_select_db("xxx") or die(mysql_error());
    $data = mysql_query("SELECT * FROM tabella WHERE continent='nordamerica' ORDER BY country ASC") or die(mysql_error());
    Print "<ul class=\"continent\">";
    while ($appoggio= mysql_fetch_array($data)){
    Print "<p class=\"nomepaese\">".$appoggio['country']."</p>";
    while($info = mysql_fetch_array( $data )) {
    Print "<li>";
    Print "<a href=\"index.php/en/abc/bb/";
    Print $info['id'];
    Print "\">";
    Print $info['name'] . "</a>";
    Print "</li>";
    }
    }
    Print "</ul>";
    ?>

  2. #2
    Non puoi effettuare un doppio while dato che ad ogni ciclo il puntatore al resultset viene incrementato.
    Devi fare un solo ciclo a stampare il campo country solo se esso cambia di valore.
    Una cosa del genere:

    Codice PHP:
    ...
    while (
    $appoggiomysql_fetch_array($data)) {
        
    $country $country != $appoggio['country'] ? $appoggio['country'] : $country;
        echo 
    $country;
        ....
    }
    ... 
    "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
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Codice PHP:
    $country $country != $appoggio['country'] ? $appoggio['country'] : $country

    Se $country è diverso $appoggio[country] allora usa quest'ultimo, se sono uguali usa $country (che è uguale a $appoggio[country])
    Tanto vale fare così:
    Codice PHP:
    $country $appoggio['country']; 
    Comunque puoi provare così:
    Codice PHP:
    <?php

    mysql_connect
    ("xxx","xxx","xxx") or die(mysql_error());
    mysql_select_db("xxx") or die(mysql_error());
    $data mysql_query("SELECT * FROM tabella WHERE continent='nordamerica' ORDER BY country ASC") or die(mysql_error()); 
    $countries = [];
    while (
    $appoggiomysql_fetch_array($data)) {
        if (!
    array_key_exists($countries$appoggio["country"]) $countries[$appoggio["country"]] = [];
        
    $countries[$appoggio["country"]][$appoggio["id"]] = $appoggio["name"];
    }
    echo 
    "<ul class='continent'>";
    foreach (
    $countries as $country => $names) {
        
    ?>
        <li>
            <p class='nomepaese'><?php echo $country?></p>
            <ul>
            <?php foreach ($names as $id => $name) { ?>
                <li>
                    <a href='index.php/en/abc/bb/<?php echo $id?>'>
                        <?php echo $name?>
                    </a>
                </li>
            <?php ?>
            </ul>
        </li>
        <?php
    }
    echo 
    "</ul>";

    ?>
    Poi... mysql è deprecata da php 5.5, è meglio se usi mysqli:
    Codice PHP:
    <?php

    $mysqli 
    = new mysqli("localhost""username""password""database");
    $data mysqli->query("SELECT * FROM tabella WHERE continent='nordamerica' ORDER BY country ASC"); 
    $countries = [];
    while (
    $appoggio$data->fetch_array()) {
        if (!
    array_key_exists($countries$appoggio["country"]) $countries[$appoggio["country"]] = [];
        
    $countries[$appoggio["country"]][$appoggio["id"]] = $appoggio["name"];
    }
    echo 
    "<ul class='continent'>";
    foreach (
    $countries as $country => $names) {
        
    ?>
        <li>
            <p class='nomepaese'><?php echo $country?></p>
            <ul>
            <?php foreach ($names as $id => $name) { ?>
                <li>
                    <a href='index.php/en/abc/bb/<?php echo $id?>'>
                        <?php echo $name?>
                    </a>
                </li>
            <?php ?>
            </ul>
        </li>
        <?php
    }
    echo 
    "</ul>";

    ?>
    PS
    Il codice che hai postato avrebbe generato un html non valido (un <p> come figlio diretto di un <ul> )

    PPS
    Quando posti del codice sul forum, mettolo tra i tag [html], [php] o [code] (i tasti "<>", "php" e "#" nell'editor in modalità avanzata)

    PPPS
    Quanto mi piacciono le risposte lunghe
    Ultima modifica di tampertools; 23-10-2014 a 17:52
    No

  4. #4
    Quote Originariamente inviata da tampertools Visualizza il messaggio
    Codice PHP:
    $country $country != $appoggio['country'] ? $appoggio['country'] : $country

    Se $country è diverso $appoggio[country] allora usa quest'ultimo, se sono uguali usa $country (che è uguale a $appoggio[country])
    Tanto vale fare così:
    Codice PHP:
    $country $appoggio['country']; 
    Oppssss...hai ragione ho scritto una fre@@accia!
    "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
    Oct 2014
    Messaggi
    3
    Grazie mille a tutti e due! Gentilissimi e disponibilissimi

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.