Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 37
  1. #1

    recperare dati da mysql con chiavi esterne

    Salve a tutti...
    è da un po di giorni che ci giro intorno senza venirne fuori...

    ho un database con le seguenti tabelle :

    codice:
    CREATE TABLE IF NOT EXISTS Clienti (
    	`codcliente`	int(5) PRIMARY KEY,
    	`indirizzo`	varchar(50) NOT NULL,
    	`email`		varchar(50) NOT NULL,
    	`città` 	varchar(50),
    	`codfiscale`	varchar(16) NOT NULL,
    	`nome`		varchar(50) NOT NULL,
    	`cognome`	varchar(50) NOT NULL,
    	`datanascita`	date,
    	`part_iva`	int(50),
    	`iban`		varchar(50)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8
    
    CREATE TABLE IF NOT EXISTS `AccessoInternet` (
    	codcliente	int(5),
    	username	varchar(50) NOT NULL,
    	password	varchar(50) NOT NULL,
    	tipo		char(1) NOT NULL,
    	FOREIGN KEY (codcliente) REFERENCES Clienti(codcliente) ON UPDATE CASCADE
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    è praticamente un sistema di gestione contatti e clienti con altre tabelle ma il problema è su queste due...

    io ora vorrei recuperare i dati di tutti i campi ricercando un cliente per cognome con uno script di ricerca...e vorrei che venissero fuori anche i campi della tabello accessointernet..che ha chiave esterna in clienti...tutto normale sembrerebbe...

    ho fatto uno script che inserisco direttamente nella pagina...

    Codice PHP:
    <form action='clienti.php' method='GET'>

    <span style="margin-left:5px">[b]Ricerca[/b]</span>
    <span style="margin-left:5px"><input type='text' name='cerca'></span>
    <span style="margin-left:5px"><input type='submit' value='Cerca'>
    </form>
    <div id="contenuto_centro">
    <?php


    include ('config_db.php');
    mysql_select_db('progetto'$connessione) or die ('Errore durante la selezione del db');

    $cerca $_GET['cerca'];
        if ( 
    $cerca == TRUE && $cerca != "" ) {
                    if ( 
    strlen($cerca) >= ) {
                        
                        
    $cerca =  mysql_escape_string(stripslashes($cerca));
                        
                        
    $query1 "SELECT codcliente FROM clienti WHERE cognome LIKE '%$cerca%'";
                        
                        
    $ris mysql_query($query1) or die (mysql_error());
                        
                        while(
    $rigamysql_fetch_row($ris)) {
                            
                        
    $codice_ut$riga[0];
            
                        
    $query "SELECT * FROM clienti c NATURAL JOIN accessointernet a WHERE c.codcliente='".$codice_ut."'";
                        
                        
    $risultato mysql_query($query) or die (mysql_error()); 
                        
                        
    $risposta mysql_query($query) or die ("Utilizza termini più specifici!");

                        
    $dentro_la_querymysql_fetch_assoc($risposta);
                    
                        if ( 
    $dentro_la_query == TRUE ) {

                            while(
    $rowmysql_fetch_assoc($risultato)) { 
                                
                                
    $codice $row['codcliente'];
                                
    $nome $row['nome'];
                                
    $cognome $row['cognome'];
                                
    $contratto $row['contratto'];
                                
    $email $row['email'];
                                
    $indirizzo $row['indirizzo'];
                                
    $citta $row['citta'];
                                
    $codicef $row['codfiscale'];
                                
    $datan $row ['datanascita'];
                                
    $iban $row['iban'];
                                
    $piva $row['part_iva'];
                                
    $user $row['username'];
                                
    $password $row['password'];
                            
                                
    // stampiamo i nostri dati
                                
    echo "<table border='1'>
                                <tr>
                                <th>Codice</th>
                                <th>Nome</th>
                                <th>Cognome</th>
                                <th>Email</th>
                                <th>Indirizzo</th>
                                <th>Città</th>
                                <th>Codice Fiscale</th>
                                <th>Data di Nascita</th>
                                <th>Iban</th>
                                <th>Partita Iva</th>
                                <th>User</th>
                                <th>Password</th>
                                </tr>"
    ;
                                
                                 echo 
    "<tr>";
                                 echo 
    "<td>" $codice "</td>";
                                 echo 
    "<td>" $nome "</td>";
                                 echo 
    "<td>" $cognome "</td>";
                                 echo 
    "<td>" $email "</td>";
                                 echo 
    "<td>" $indirizzo "</td>";
                                 echo 
    "<td>" $citta "</td>";
                                 echo 
    "<td>" $codicef "</td>";
                                 echo 
    "<td>" $datan "</td>";
                                 echo 
    "<td>" $iban "</td>";
                                 echo 
    "<td>" $piva "</td>"
                                 echo 
    "<td>" $user "</td>";
                                 echo 
    "<td>" $password "</td>";  
                                 echo 
    "</tr>";
                            }
                        }
                        }
                    }
        }
                    
    ?>
    adesso praticamente con questo script nel form inserisco il cognome da ricercare e mi stampa il tutto....solo che mi funziona con un solo cliente...che ha codcliente=5...con tutti gli altri no e non capisco il perchè...

    Potete dirmi dove sbaglio???GRAZIE

  2. #2
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Metodo più semplice :
    Rinomina codcliente di Clienti in cli_codcliente
    Rinomina codcliente di AccessoInternet in ai_codcliente
    Questa è la select e quello che serve a te è la left join / oppure full join cerca su internet la differenza.
    Io consiglio in ogni tabella di mantenere un nome diverso perche altrimenti devi usare l'attributo as ad ogni tabella che vai a selezionare per diversificarle.

    SELECT * FROM clienti
    LEFT JOIN AccessoInternet ON cli_codcliente = ai_codcliente
    WHERE cognome LIKE '%$cerca%'
    Che mestiere difficile.....essere da soli ancora di più

  3. #3
    ottimo grazie mille!!!

    hai ragione infatti ho modificato anche tutti gli altri campi simili...

    ora se invece dovessi inserire dei dati nella tabella accesso_internet con lo stesso metodo?
    cioè con lo stesso codice cliente?

    io ho pensato così:

    Codice PHP:
    INSERT INTO Accesso_Internet (`username`,`password`,`tipo`) VALUES ('$user','$password','$tipo'ON ai_codcliente cli_codcliente WHERE cognome='$cognome'" 
    ma da errore...

  4. #4
    up

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    Non ha senso quella sql che hai scritto, descrivimi cosa vorresti fare
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    eh infatti immaginavo...

    praticamente ho un form con il quale aggiungo clienti...e dallo stesso form vorrei aggiungere anche i corrispettivi utente e password ecc nella tabella accesso_internet per il corrispondente cliente appena aggiunto....

    per cui creo un cliente e nella tabella accesso_internet inserisco utente e pass par lo stesso codice cliente...che è chiave esterna...
    e non riesco a trovare la query giusta...

  7. #7
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    seguendo la tua logica dovresti intesecare una select all'insert ma è sbagliato, perche metti un caso di omonimia nel cognome non riesci più a recuperare il codice cliente corretto...

    Ora domanda, il codice cliente con quale criterio lo attribuisci?

    nel caso in cui, come sospetto, l'inserimento dell'anagrafica e dell'accesso a internet vengono fatte in sequenza devi semplicemente fare una insert normale utilizzando lo stesso id.
    Che mestiere difficile.....essere da soli ancora di più

  8. #8
    si vengono fatte in sequenza...cioè prima inserisco il cliente e poi l'accesso internet...

    l'id cliente e quello dell'accesso internet devono essere uguali....

    ma quindi cosa metto dopo l'insert?il where non posso utilizzarlo...uso il select per prendere l'id??

  9. #9
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    la causale where segue la select (perche specifici cosa selezionare ), la causale update (perchè specifici cosa aggiornare), ma non ha senso specificarla nell'insert ed è per questo che ti da errore.

    fai l'insert normale assicurandoti che i due codici clienti siano uguali e univoci e vedrai che con la select di prima tirerai fuori entrambi i record.
    Che mestiere difficile.....essere da soli ancora di più

  10. #10
    ok si ho capito....ma i codici clienti non li metto io...lascio al db che li inserisce autoincrementando...

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.