Visualizzazione dei risultati da 1 a 5 su 5

Discussione: inner join

  1. #1

    inner join

    Salve a tutti
    ho la necessità di scrivere una query facendo uso della funzione inner join:
    ho una tabella (libro_biblio) che tra i vari campi ha id_libro2 e id_biblio ed una seconda tabella (libri2) che ha come campi id_libro_arc e titolo.
    riepilogo:

    tabella1: libro_biblio
    campo1: id_libro2
    campo2: id_biblio

    tabella2: libri2
    campo1: id_libro_arc
    campo2: titolo

    la relazione tra le due tabelle è stabilita con id_libro_arc = id_libro2 e la query deve stampare il valore del campo titolo, inoltre la query deve restituire solo i record con id_biblio uguale ad una variabile inviata alla pagina php con il metogo GET. La funzione che io ho scritto (e riscritto in tutte le salse) è:

    Codice PHP:
     $result = @$conn->query("SELECT * FROM libri2 INNER JOIN libro_biblio  ON libro_biblio.id_libro2 = libri2.id_libro_arc  WHERE libro_biblio.id_biblio='".$id_bib."'");       

    while ((
    $row $result->fetch_assoc()) !== NULL)   
     
    $titolo $row['titolo'];       
    echo 
    $titolo."
    "

    la query funziona ma mi restituisce solo la prima corrispondenza. Dove sbaglio?? Grazie mille

  2. #2
    credo che il problema non sia nella query perchè anche con una semplice come questa:
    Codice PHP:
     $result = @$conn->query("SELECT * FROM libri2");      
     while ((
    $row $result->fetch_assoc()) !== NULL)    
    $titolo $row['titolo'];       
    echo 
    $titolo."
    "

    mi stampa solo la prima corrispondenza 1027 (??????) cioè l'ultima

  3. #3
    il problema l'ho risolto, anche se non ho capito perchè, come ho fatto io, è sbagliato.
    ho riscritto il codice in questo modo:
    Codice PHP:
    $result = @$conn->query("SELECT * FROM libri2 INNER JOIN libro_biblio  ON libro_biblio.id_libro2 = libri2.id_libro_arc  WHERE libro_biblio.id_biblio='".$id_bib."'");        
    while ((
    $row $result->fetch_assoc()) !== NULL)             
    echo 
    $row['titolo']."
    "

    cioè facendo stampare direttamente il valore restituito senza assegnarlo alla variebile
    Codice PHP:
    $titolo 
    e se lascio nel codice la variabile $titolo, ma senza utilizzarla

    Codice PHP:
    $titolo $row['titolo']; 
    echo 
    $row['titolo']."
    "


    echo $row['titolo']."
    ";

    non da nessuna corrispondenza.
    L'utilizzo delle variabili è molto comodo e si ottiene con codice più comprensibile, ma perchè in questo caso non mi fa funzionare lo script?

  4. #4
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    studiati la sintassi del while....
    il blocco di istruzioni da ripetere va tra parentesi graffe.... se le graffe non ci sono viene ripetuta solo la prima istruzione dopo il while.... nel tuo caso veniva ripetuto solo l'assegnazione
    $titolo = $row['titolo'];

    Il codice corretto è

    Codice PHP:
    while (($row $result->fetch_assoc()) !== NULL)
    {
       
    $titolo $row['titolo'];        
       echo 
    $titolo."
    "
    ;

    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  5. #5
    Grazie mille per l'aiuto. Ho utilizzato la funzione while un centinaio di volte e sempre correttamente ma ero talmente convinto che il problema fosse nella query che l'errore/orrore non saltava all'occhio. Scasami anche per l'inappropriatezza del titolo del tread ma, inizialmente, pensavo fosse quello giusto. Ancora grazie.

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.