Visualizzazione risultati 1 fino 6 di 6

Discussione: mysql_fetch_array e risultati query

  1. #1
    Guest

    Predefinito mysql_fetch_array e risultati query

    Ciao a tutti
    dovendo analizzare i risultati di una query mi sono trovato ad utilizzare la funzione come da titolo. Ho visto sui miei libri di testo, ma non riesco a trovare risposta... Il risultato della funzione (da quello che ho capito) è un array i cui campi sono chiamati come i campi della tabella-risultato della query. E finquì tutto ok, se non che...

    Il risultato della mia query è costituito dai campi di due tabelle (kbook_clienti, kbook_prenotazioni). Entrambe le tabelle hanno un campo chiamato "id", e quando lo richiamo con l'array (ovviamente) mi prende solo un campo, e non so come distinguere i due id l'uno dall'altro... Il codice che utilizzo è il seguente:

    Codice PHP:
    function prenotazione_da_IDprenotazione($connect, $id_prenotazione) {
    $q_r2 = "SELECT * FROM kbook_prenotazioni, kbook_clienti
    WHERE ( (kbook_prenotazioni.id = "
    . $id_prenotazione . ") AND
    (kbook_clienti.id = kbook_prenotazioni.id_cliente) );"
    ;
    $id_prenotazione = prv_injection($id_prenotazione);
    $ris = mysql_query($q_r2, $connect)
    or die(
    "Query fallita");
    while (
    $riga = mysql_fetch_array($ris)) {
    echo(
    '<p>ID Prenotazione: ' . $riga["id"] . ';</p>');
    echo(
    '<p>Camera: ' . $riga["id_camera"] . ';</p>');
    echo(
    '<p>Data ingresso: ' . $riga["data_ingresso"] . ';</p>');
    echo(
    '<p>Data uscita: ' . $riga["data_uscita"] . ';</p>');
    echo(
    '<p>ID Cliente: ' . $riga["id_cliente"] . ';</p>');
    echo(
    '<p>Nome: ' . $riga["nome"] . ';</p>');
    echo(
    '<p>Cognome: ' . $riga["cognome"] . ';</p>');
    echo(
    '<p>Nazione: ' . $riga["nazione"] . ';</p>');
    echo(
    '<p>Citt&agrave;: ' . $riga["citta"] . ';</p>');
    echo(
    '<p>Indirizzo: ' . $riga["indirizzo"] . ';</p>');
    echo(
    '<p>Email: ' . $riga["email"] . ';</p>');
    }
    mysql_close($connect);
    }
    Ho provato ad inserire una cosa del tipo $riga["kbook_clienti.email"] ma non mi viene restituito alcunchè... cosa dovrei fare per distinguere i due ID delle tabelle? Altrimenti l'ID dell'utente verrà messo sia alla voce "ID utente" che a quella "ID prenotazione". Grazie anticipatamente

  2. #2
    Guest

    Predefinito

    mysql_fetch_assoc()

  3. #3
    Guest

    Predefinito

    Devi dare un aliasi a quei campi, all'interno della query.

    SELECT kbook_prenotazioni.id AS id1, kbook_clienti.id AS id2


    Ciao!

  4. #4
    Guest

    Predefinito

    @bic:
    Se due o più colonne del risultato hanno gli stessi nomi di campo, l'ultima colonna avrà la precedenza. Per accedere alle altre colonne con lo stesso nome, si deve accedere al risultato con l'indice numerico usando mysql_fetch_row() oppure aggiunger degli alias
    aimè non risolve :(
    @debug: grazie, ora provo. Questo mi basta farlo con quei campi che hanno nome uguale giusto? Secondo voi è meglio distinguere i nomi nel database o usare di volta in volta gli alias?

  5. #5
    Guest

    Predefinito

    Cosa serve avere lo stesso nome se il DB serve a questo?

    Come detto da debug assegna un alias e crea una condizione: se il campo uno è vuoto mostra il secondo campo. Puoi usare l'operatore ternario per farlo, una cosa simile (con l'esempio di debug):

    Codice PHP:
    echo (!empty($riga['id1'])) ? $riga['id1'] : $riga['id2'];
    In ogni caso ti consiglio di usare nomi diversi, altrimenti puoi usare benissimo gli alias, ma se non sbagliano occupano un pò di memoria in più.

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Io sinceramente sono contrario all'uso degli alias, per il fatto che pensando di semplificare la query (di solito si usano per "ridurre" le chiavi dell'array risultante) si finisce per renderla notevolmente più complicata.

    Purtroppo, però, in alcuni casi il loro uso è obbligatorio, sono principalmente due:

    - uno è il tuo caso, ovvero possiedi campi su diverse tabelle ma con lo stesso nome. Tieni conto che però la convenzione più diffusa è quella di assegnare lo stesso nome ai campi di diverse tabelle solo quando c'è una relazione chiave primaria-chiave esterna tra gli stessi campi (questo per facilitare le NATURAL JOIN). Forse, progettando un po' meglio il database, riesci ad evitare questi problemi...

    - l'altro è quando devi eseguire una JOIN tra due occorrenze della stessa tabella, ti può capitare se in essa c'è una chiave esterna che fa riferimento alla chiave primaria della stessa tabella. In questo caso, non c'è altra soluzione: a una delle due occorrenze devi cambiare tutti i campi (e il nome della stessa tabella) mediante gli alias.

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •