Consultare due tabelle

di il
17 risposte

Consultare due tabelle

Salve, ho fatto un sistema bibliotecario e vorrei che quando un utente cerca un libro per il titolo, venga fatto una ricerca in due tabelle, 1.tabella utenti, 2.tabella libri, nella homepage ho una sezione per i risultati, in teoria li dovrebbe mostrarmi i libri disponibili e la zona in cui si trovano li altri utenti che prestano il libro.

la struttura della tabella utenti e composta da 7 campi:
-id
-email
- password
-nazione
- iscrizione
- token
- attivo

l'altra tabella si chiama raccolta ed e composta da 4 campi:
-id
- nome
- disponibilita
- data

in teoria se cerco per esmpio il libro i harry potter, dovrebbe cercare per primo nella tabella raccolta e poi controllare se ci sono, se ci sono dovrebbe prendere il numero di disponibilita e poi associarlo a un utente, e alla fine dovrebbe mostrarlo nella sezione dedicata della mia homepage. lascio il codice del index e dello script che fa la query, ( ometto nel codice del index i formulari di login e di registrazione, non mi sembrano pertinenti, in caso contrario fatemi sapere)

INDEX.PHP

/* CAMPO DI RICERCA */
<form method="get" action="consultadb.php">
Titolo del libro<input type="text" name="nome">
Dove<input type="text" name="nazione">
<input type="submit" name="invio">
</form>

/* SEZIONE PER I RISULTATI */ (di default alla prima visita mostra tutti i dati estrapolati della mia tabella raccolta)
<?php
$conex = mysql_connect("localhost", "wardrivers");
mysql_select_db("my_wardrivers", $conex);

$sql = "SELECT * FROM raccolta";

$result = mysql_query($sql) ;


echo "<h4>database</h4>";

while($reg = mysql_fetch_array($result)) {
echo "<div id='risultati'>";
echo "nome :".$reg['nome']."<br>";
echo "disponibili : ".$reg['disponibilita']."<br>";
echo "nazione : ".$reg['nazione']."<br>";

echo "data inserimento :".$reg['data']."<br>";

echo "</div>";

}
?>

CONSULTADB.PHP

<?php

$nome = $_GET['nome'];
$nazione = $_GET['nazione'];

$conex = mysql_connect('localhost', 'wardrivers');
mysql_select_db('my_wardrivers', $conex);

$sql = "SELECT * FROM raccolta WHERE nome='$nome' OR nazione='$nazione' ";
$result = mysql_query($sql);

if(mysql_num_rows($result) == 0) {echo "non ce ancora niente";}
elseif(mysql_num_rows($result) >= 1) {

while($reg = mysql_fetch_array($result)) {
echo "<div id='risultati'>";
echo "nome :".$reg['nome']."<br>";
echo "disponibilita :".$reg['disponibilita']."<br>";
echo "nazione :".$reg['nazione']."<br>";


}
?>

voglio il codice di risposta in questo modo, non voglio codice oop perche sono ancora un principiante, grazie della comprensione

17 Risposte

  • Re: Consultare due tabelle

    Mi sembra di capire che più utenti possano mettere a disposizione della biblioteca una copia di Harry Potter
    In che modo la tabella raccolta si lega alla tabella utenti?
  • Re: Consultare due tabelle

    Da quanto si possa vagamente intuire non è altro che un join
  • Re: Consultare due tabelle

    In teoria ogni utente che si registra puo inserire il libro che dispone, se il libro esiste gia nella tabella raccolta, incremento il campo disponibilita, se non esiste creo un nuovo record.
    il punto e che il campo di ricerca dovrebbe restituire la quantitita di libri disponibili e la zona in cui si trovano. es harry potter 5 italia, paperino 10 germania, ecc
  • Re: Consultare due tabelle

    Magari se fai un esempio di un record della tabella utenti ed uno della tabella raccolta è più chiaro.
  • Re: Consultare due tabelle

    Tabella utenti
    id 1
    email
    nazione italia

    tabella raccolta
    id 1
    nome harry potter
    disponibilita 5

    puoi trovare il codice completo nel mio profilo di github www.github/stevenpr
  • Re: Consultare due tabelle

    Se id 1 della tabella raccolta è la chiave esterna che si riferisce ad id 1 della tabella Utenti, come indicato sopra da +m2+ ti basta fare una join
  • Re: Consultare due tabelle

    E come si fa, mi fai un esempio, grazie
  • Re: Consultare due tabelle

    supremo ha scritto:


    E come si fa, mi fai un esempio, grazie
    SELECT
        autori.nome, libri.titolo
    FROM
        libri
    INNER JOIN
        autori
    ON
        autori.id = libri.id_autore
  • Re: Consultare due tabelle

    In realtà parrebbe più una LEFT JOIN
  • Re: Consultare due tabelle

    Ma che differenza fra tra di loro, inner join, left join e right join, ancora non mi e molto chiaro, e a proposito a che cosa serve il on autori.libri = libri.id_autore, non capisco perche lo devi uguagliare
  • Re: Consultare due tabelle

    supremo ha scritto:


    Ma che differenza fra tra di loro, inner join, left join e right join, ancora non mi e molto chiaro, e a proposito a che cosa serve il on autori.libri = libri.id_autore, non capisco perche lo devi uguagliare

    Uno dei tanti esempi sul web
  • Re: Consultare due tabelle

    MaxMag64 ha scritto:


    supremo ha scritto:


    Ma che differenza fra tra di loro, inner join, left join e right join, ancora non mi e molto chiaro, e a proposito a che cosa serve il on autori.libri = libri.id_autore, non capisco perche lo devi uguagliare

    Uno dei tanti esempi sul web
    ho un altro problema, se accedo per url al script database.php che sarebbe lo script incaricato di far aggiungere nuovi libri agli utenti, automaticamente incrementa la disponibilita di tutti i libri presenti nella tabella raccolta.
    questo script funziona come un panello di controllo degli utenti

    <?php

    $nome = $_GET['nome'];
    $data = date('Y-m-d H:i:s');


    $conex = mysql_connect("localhost", "wardrivers");
    mysql_select_db("my_wardrivers", $conex);


    $recupero = "SELECT nome FROM raccolta WHERE nome='$nome'";
    $result = mysql_query($recupero) or die (mysql_error());
    if(mysql_num_rows($result) == 0) {
    $sql = "INSERT INTO raccolta(id, nome, disponibilita, data)
    VALUES (NULL, '$nome', '1', '$data')";
    mysql_query($sql) or die(mysql_error());
    echo "dati inseriti correttamente";


    }
    elseif(mysql_num_rows($result) >= 1) {
    mysql_query("UPDATE raccolta SET disponibilita=disponibilita+1");
    echo "dati aggiornati";
    }
    else{echo 'err';}

    ?>

    in teoria il messaggio di stato dovrebbe uscire solo agli utenti registrati che fanno un operazione
    http://www.wardrivers.altervista.org/database.ph
  • Re: Consultare due tabelle

    supremo ha scritto:


    in teoria il messaggio di stato dovrebbe uscire solo agli utenti registrati che fanno un operazione
    http://www.wardrivers.altervista.org/database.ph
    Beh, immagino che gli utenti registrati effettueranno un Login.
    Una volta tenuto traccia dell'accesso decidi se fare la Insert/Update o semplicemente consultare la raccolta.
    Dal link che hai postato non si capisce molto cosa vorresti fare...
  • Re: Consultare due tabelle

    Non bisogna registrarsi per consultare le tabelle dal homepage, ma solo chi e loggato puo aggiungere nuovi dati alla tabella raccolta, il problema e che quando si aggiunge qualcosa alla tabella questa passa per lo script database, il punto e che vorrei limitare l'acesso a quello script solo agli utente registrati, perche seno chiunque puo accedere e di conseguenza alterare il funzionamento del sistema.
    in teoria se accedo come utente non registrato allo script, tutti i record della mia tabella vengono modificati e il campo disponibilita viene incrementato.
Devi accedere o registrarti per scrivere nel forum
17 risposte