Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180

    collegamento tra 2 tabelle

    Ciao a tutti,
    sto piano piano smanettando su un db "libreria" per farmi le ossa con MySQL e PHP.

    La struttura del db è la seguente:
    tabella editore: id(1,2...), nome
    tabella libro: id,titolo,editore(1,2...)

    ho creato una pagina che fa selezionare dal menu all'utente o il titolo di un libro o una ricerca libera:


    file html:
    <body>
    <table width="770" border="1" align="center" cellpadding="10" cellspacing="3">
    <tr align="center" valign="middle">
    <td bgcolor="#CCCCCC" class="CellaIntest">Selezione dati</td>
    </tr>
    <form name="elab" method="post" action="select.php">
    <tr>
    <td align="center" valign="middle" class="CellaDati">

    Seleziona un titolo:
    <select name="tit" size="1" id="tit">
    <option value="xx"> </option>
    <option value="1">Di noi tre </option>
    <option value="2">Due di due </option>
    <option value="3">Il diario di Bolivia </option>
    <option value="4">Il tropico del cancro </option>
    <option value="5">HTML 4 tutto e oltre </option>
    <option value="6">MySQL guida completa </option>
    <option value="7">Imparare PHP in 24 ore </option>
    <option value="8">Comunità sul web </option>
    <option value="9">La Bibbia </option>
    </select>
    </p>


    cerca_titolo
    <input name="cerca" type="text" size="50">
    </p></td>
    </tr>
    <tr align="center" valign="middle">
    <td class="CellaIntest"> <input type="submit" value="Visualizza dati ">
    </td>
    </tr>
    </form>
    </table>




    </body>


    file php:
    <body>

    <?php
    // richiamo il file di configurazione
    require 'config.php';

    // richiamo lo script responsabile della connessione a MySQL
    require 'connect.php';

    // recupero del dato inserito nella pagina select.html
    $datoinserito = $_POST['tit'];
    $datoinserito2 = $_POST['cerca'];

    // preparo la query
    if ($datoinserito == "xx") {
    if ($datoinserito2 == "") {
    $query = "SELECT * FROM libro";
    }
    else {
    $query = "SELECT * FROM libro WHERE titolo LIKE '%$datoinserito2%'";
    }
    }
    else {
    $query = "SELECT * FROM libro WHERE id='$datoinserito'";
    }

    // invio la query
    $result = mysql_query($query);

    // controllo l'esito
    if (!$result) {
    die("Errore nella query $query: " . mysql_error());
    }
    echo "

    $query </p>";


    // preparo l'intestazione della tabella
    echo '
    <table border="1">
    <tr>
    <th>id</th>
    <th>titolo</th>
    <th>editore</th>
    </tr>';

    while ($row = mysql_fetch_assoc($result)) {
    $id = htmlentities($row['id']);
    $titolo = htmlentities($row['titolo']);
    $editore = htmlentities($row['editore']);


    echo "<tr>
    <td>$id</td>
    <td>$titolo</td>
    <td>$editore</td>
    </tr>";
    }

    echo '</table>';

    // libero la memoria di PHP occupata dai record estratti con la SELECT
    mysql_free_result($result);

    // chiudo la connessione a MySQL
    mysql_close();
    ?>
    </body>

    tutto funziona, ma vorrei che nella visualizzazione nella colonna editore, si leggesse il nome dell'editore invece che il suo id; bisogna quindi collegare il campo id della tabella libro con quello della tabella editore e far visualizzare il corrispondente nome. Credo serva la JOIN ma non conosco la sintassi..........aiuto!!!!!!

    grazie

  2. #2
    "SELECT * FROM libro WHERE titolo LIKE '%$datoinserito2%'" diventa:

    SELECT A.*, B.nome
    FROM libro A INNER JOIN editore B on A.id=B.editore
    WHERE A.titolo LIKE '%$datoinserito2%'"


    "SELECT * FROM libro WHERE id='$datoinserito'" diventa:

    SELECT A.*, B.nome
    FROM libro A INNER JOIN editore B on A.id=B.editore
    WHERE A.id='$datoinserito'"

    Per questioni di efficienza, però ti conviene creare una relazione CHIAVE ESTERNA-CHIAVE PRIMARIA su entrambe le tabelle.

    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    ...grazie...

    infatti in access avevo fatto così (faccio creazione guidata e poi mi studio l'SQL)

    SELECT libro.titolo, editore.nome
    FROM editore INNER JOIN libro ON editore.id = libro.editore;



    ..però ho dovuto collegare le due tabelle attraverso editore.id===libro.editore.


    come faccio a collegare le tabelle con PHPMyAdmin?

    grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    Cioè mi spego meglio,
    come faccio a creare una relazione CHIAVE ESTERNA-CHIAVE PRIMARIA su entrambe le tabelle?

    grazie ancora

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    ...purtroppo sono ancora bloccato........
    grazie

    PS: dove trovo una buona guida all'sql, con comandi e sintassi?

    grazie

  6. #6
    Scusa per il ritardo ma stiamo avendo un sacco di problemi con l'adsl e penso ne avremo per diversi giorni.

    Potresti provare a vedere la documentazione sul sito ufficiale di mysql

    Comunque è nella tabella libro che devi creare un riferimento alla chiave primaria della tabella editore.
    Se non sbaglio, all'atto della creazione della tabella occorre scrivere la parola chiave REFERENCES però non ricordo bene la sintassi. Se vai su mysql e vedi la documentazione di mysql 5 sicuramente c'è la sintassi precisa.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    Grazie, credo di averlo fatto bene....


    non credo di aver capito cosa intendi per A e B nel codice:
    SELECT A.*, B.nome
    FROM libro A INNER JOIN editore B on A.id=B.editore
    WHERE A.titolo LIKE '%$datoinserito2%'"


    Dopo cosa devo inserire nella select per visualizzare i dati collegati?
    grazie

  8. #8
    Originariamente inviato da vincentand
    Grazie, credo di averlo fatto bene....


    non credo di aver capito cosa intendi per A e B nel codice:
    SELECT A.*, B.nome
    FROM libro A INNER JOIN editore B on A.id=B.editore
    WHERE A.titolo LIKE '%$datoinserito2%'"


    Dopo cosa devo inserire nella select per visualizzare i dati collegati?
    grazie
    Si tratta di sintassi SQL, precisamente di ALIAS

    in pratica quando scrivi FROM libro A
    tu dici che da ora in poi al posto di libro userai A, quindi A.titolo è la stessa cosa che dire libro.titolo.


    SELECT A.*, B.nome
    FROM libro A INNER JOIN editore B on A.id=B.editore
    WHERE A.titolo LIKE '%$datoinserito2%'"

    con questa select prendi già i dati collegati. Precisamente per ogni libro il cui titolo è simile al contenuto di $datoinserito2, prendi tutti i dati di libro, cioé id, titolo ed editore, e prendi anche il nome dell'editore di quel libro.
    Ti consiglio comunque ti dare un'occhiata a qualche manuale SQL riguardo relazioni tra tabelle, join, etc............

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    Grazie mille sei stato chiarissimo!!!

    Mi dò una svegliata leggendo qualcosa e poi ci risentiremo.

    grazie tante per adesso

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2002
    Messaggi
    180
    Ho capito il problema.............
    non riesco a creare le relazioni tra le tabelle in MYSQL con PHPMyAdmin..............

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.