Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23

Discussione: PHP Query - Array

  1. #1

    PHP Query - Array

    Ciao a tutti ragazzi.
    Premetto che con il php mi sono un po' arruginito. ;-)

    Vi spiego un po' il mio problema.
    Ho un tbl che praticamente mi gestisce Nazioni - Regioni e Città.
    Tre combo menu gestiscono in interfaccia grafica il processo.
    il Primo combo è Nazioni il secondo combo le Regioni e il terzo le città.

    Faccio una select query al database...
    e poi gestisco il tutto con degli array...
    Problema 1 = sulle combo mi appare anche uno spazio vuoto su tutte e tre le combo
    Problema 2 = è possibile intervenire direttamente sugli array per gestire il valori che estrapolo dal database e sono doppi?
    (Per Esempio la Nazione Italia si ripete per 5 volte, ovviamente sul menu voglio che me ne appaia una )Vi posto il codice

    <?php

    $cerca = "SELECT * FROM location";
    $result = mysql_query($cerca) or die('Error, query failed2');
    while($row = mysql_fetch_array($result))
    {
    $i = $i+1;

    $ID_location = $row ["id"];
    $LOC_CODE = $row ["LOC_CODE"];
    $Nazione = $row["Nazione"];
    $Regione = $row ["Regione"];
    $Città = $row ["Citta"];

    $array_totale[$i][0] = $row ["LOC_CODE"];
    $array_totale[$i][1] = $row["Nazione"];
    $array_totale[$i][2] = $row ["Regione"];
    $array_totale[$i][3] = $row ["Citta"];
    }



    ?>

    <form name="cerca" method="post" action="incontra.php">


    Preferenze :
    <select name="Preferenze">

    </select>
    </p>


    Nazione :
    <select name="Nazione">
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php for($i=0; $i<count($array_totale[1]); $i++)
    { echo '<option>'.$array_totale[$i][1].'</option>'; } ?>
    </select>
    </p>


    Regione :
    <select name="Regione" >
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php for($i=0; $i<count($array_totale[2]); $i++)
    { echo '<option>'.$array_totale[$i][2].'</option>'; } ?>
    </select>
    </p>


    Citt&agrave; :
    <select name="Città">
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php for($i=0; $i<count($array_totale[3]); $i++)
    { echo '<option>'.$array_totale[$i][3].'</option>'; } ?>
    </select>

  2. #2
    A prima vista mi pare che la tua tabella contenga principalmente le città, ossia contiene il nome delle città e per ognuna di queste ha il valore della Regione e della Nazione.

    Indi per cui, se così fossi puoi utilizzare la clausola MySQL GROUP BY per raggruppare i record in base al valore che devi prendere.

    Esempio:

    Codice PHP:

    $query_nazione 
    "SELECT Nazione FROM location GROUP BY Nazione ORDER BY Nazione ASC";

    $query_regione "SELECT Regione FROM location GROUP BY Regione ORDER BY Regione ASC";

    $query_citta "SELECT Citta FROM location ORDER BY citta ASC"
    GROUP BY ha il compito di raggruppare tutti i record in base al campo selezionato, per cui nel primo caso andrà a raggruppare tutti i record in base al nome delle nazioni, quindi, dove il nome delle nazioni è uguale, verrà visualizzato un solo record.

    Nel caso delle città non dovrebbe servire, ma se servisse masta aggiungere prima di ORDER BY: GROUP BY Citta

    Un'altra alternativa è utilizzare la funzione sempre del MySQL DISTINCT()

    Esempio:

    Codice PHP:

    $query_nazione 
    "SELECT DISTINCT(nazione) FROM location ORDER BY nazione ASC";

    // E così via le altre queries 
    DISTINCT esegue più o meno la stessa funzione di GROUP BY, per cui visualizza tutti i record, in questo caso delle nazioni, raggruppando là dove il campo da distinguere è uguale.


  3. #3
    grazie per la risposta...

    però io devo arrangiarmi con una sola query

    la tbl è così composta ( ti faccio un esempio )

    id = 0
    LOC _CODE = 39040001
    Nazione = Italia
    Regione= Veneto
    Citta = Verona

    il codice LOC_CODE funge da codice univoco 39 sta per italia ( prefisso numerico )
    04 per veneto e scalare numerico per le province..
    poi io da codice per conoscere le corrispondenze basta che splitto il LOC_CODE...

    cmq il problema nn è questo...
    purtroppo ho solo quella query e cioè
    Codice PHP:
    $cerca "SELECT * FROM location"
    la mia idea era quella di "scremare" i risultati direttamente sugli array che ottengo

  4. #4
    Perchè sei obbligato ad usare una sola query?

    Nel codice che hai postato all'inizio mi pare che potevi usarne anche più di una...

    Comunque in tal caso mi viene in mente solo la funzione UNION che si occupa di unire i risultati di più query ma in una sola.

    Potresti fare una cosa del genere:

    Codice PHP:

    $query 
    "SELECT COUNT(DISTINCT(nazione)) AS cnazioni, DISTINCT(nazione) FROM location ORDER BY nazione ASC
                 UNION
                 SELECT COUNT(DISTINCT(regione)) AS cregioni, DISTINCT(regione) FROM location ORDER BY nazione ASC
                 UNION
                 SELECT COUNT(citta) AS ccitta, citta FROM location ORDER BY citta ASC" 
    Questa query quindi ti unisce i record delle nazioni, quelli delle regioni e delle città.

    Dopo di che in ogni <select> fai un ciclo for per cnazioni quando lavori sulle nazioni, cregioni quando lavori sulle regioni e printi i risultati. (cnazioni e cregioni ti dicono rispettivamente quante nazioni e quante regioni ci sono)



    PS. La query l'ho scritta ora senza provarla, dimmi se va.

  5. #5
    grazie mille sei stato gentilissimo... provo tutto appena posso

  6. #6
    allora, non posso lavorare sulla query...

    posso solo modificare l'array finale
    ho visto che esiste array_unique per poter scremare i doppioni,
    non so perchè applicandolo non mi mostra nulla sulla combo

    Codice PHP:
    <select name="Nazione">
     <option disabled="disabled">Seleziona dall' elenco</option>
    <?php for($i=0$i<count($array_totale[1]); $i++)

    echo 
    '<option>'.array_unique($array_totale[$i][1]).'</option>';

    ?>
      </select>

  7. #7
    io farei così...

    Codice PHP:
    <?php

    $array_loc_code 
    = array();
    $array_nazione = array();
    $array_regione = array();
    $array_citta= array();

    $cerca "SELECT * FROM location";
    $result mysql_query($cerca) or die('Error, query failed2');
    while(
    $row mysql_fetch_array($result))
    {
    $i $i+1;

    $ID_location $row ["id"];
    $LOC_CODE $row ["LOC_CODE"];
    $Nazione $row["Nazione"];
    $Regione $row ["Regione"];
    $Città $row ["Citta"];

    f(!array_search($LOC_CODE$array_loc_code)
       
    $array_loc_code[] = $LOC_CODE;

    if(!
    array_search($Nazione$array_nazione)
       
    $array_nazione[] = $Nazione;

    if(!
    array_search($Regione$array_regione)
       
    $array_regione[] = $Regione;

    if(!
    array_search($Citta$array_citta)
      
    $array_citta[] = $Citta;
    }



    ?>

    <form name="cerca" method="post" action="incontra.php">


    Preferenze :
    <select name="Preferenze">

    </select>
    </p>


    Nazione :
    <select name="Nazione">
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php 
    foreach($array_loc_code as $chiave=>$valore)
                  echo 
    '<option>'$valore.'</option>'
    ?>
    </select>
    </p>


    Regione :
    <select name="Regione" >
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php 
    foreach($array_regione as $chiave=>$valore)
                  echo 
    '<option>'$valore.'</option>'
    ?></select>
    </p>


    Città :
    <select name="Città">
    <option disabled="disabled">Seleziona dall' elenco</option>
    <?php 
    foreach($array_citta as $chiave=>$valore)
                  echo 
    '<option>'$valore.'</option>'
    ?></select>
    array_search($ago, $pagliaio) verifica la presenza del valore $ago nell'array $pagliaio. In questo modo nell'array SICURAMENTE non ti ritroverai doppioni

  8. #8
    Per la ricerca in un array si usa in_array($ago, $pagliaio), array_search si usa se si vuole sia restituita la chiave corrispondente alla ricerca da effettuare

    http://it2.php.net/manual/it/function.in-array.php

  9. #9
    Originariamente inviato da ferrate
    allora, non posso lavorare sulla query...

    posso solo modificare l'array finale
    ho visto che esiste array_unique per poter scremare i doppioni,
    non so perchè applicandolo non mi mostra nulla sulla combo

    Codice PHP:
    <select name="Nazione">
     <option disabled="disabled">Seleziona dall' elenco</option>
    <?php for($i=0$i<count($array_totale[1]); $i++)

    echo 
    '<option>'.array_unique($array_totale[$i][1]).'</option>';

    ?>
      </select>
    Prova a chiamare la funzione prima del ciclo.

    Quando ottieni l'array, chiami array_unique()


  10. #10
    errore di post

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.