• User Attivo

    problema relazioni con query php

    Ciao a tutti, io avrei un problema nelle relazioni con le query di php.
    Provo a spiegarti:
    ho 3 tabelle:

    1. "tbl_users"
      • campo user_id (autoincrem.)
      • campo user_name
      • campo user_pass
      • campo user_lastaccess
    2. "anag_ditta"
      • campo user_id (autoincrem.)
      • campo id_utenteee (che riporta l'user_id di "tbl_users")
      • campo ragione_sociale
        ecc. ecc.
    3. "anag_dip"
      • campo user_id (autoincrem.)
      • campo id_utente (che riporta l'user_id di "tbl_users")
      • campo id_azienda
      • campo cognome
        ecc. ecc.
        Il mio problema è che quando faccio la seguente query per il dettaglio di un dipendente:
        $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2'" ;
        //tipo2 è quella che seleziona l'id_azienda da anag_dip
        $prova2 = mysql_query($prova1,$connessione);
        $prova3 = mysql_fetch_array($prova2);
        $userid4 = $prova3[0];
        print "<br>";
        print "azienda: "."$userid4"."<br>";
        mi seleziona la prima azienda (di tutte le aziende che trova) che abbia come cognome quel cognome. Quindi nel caso ci fossero 2 dipendenti con lo stesso cognome mi visualizza come ditta la prima che trova che ha quel cognome.
        Ecco il mio problema è nelle relazioni.
        Forse dovrei creare un altro campo...
        Come posso risolvere la cosa?

  • Consiglio Direttivo

    @maubox8 said:

    .........
    $userid4 = $prova3[0];
    print "<br>";
    print "azienda: "."$userid4"."<br>";

    Ciao maubox8 😉
    $prova3[0] non è altro che il primo elemento dell'array che contiene i risultati della query, se vuoi vederli tutti puoi provare in questo modo
    [php]while ($prova3=mysql_fetch_array($prova2))
    {
    $userid4=$prova3['id_azienda'];
    print "azienda: ".$userid4."<br>";
    }
    [/php]
    😉


  • User Attivo

    @Samyorn said:

    Ciao maubox8 😉
    $prova3[0] non è altro che il primo elemento dell'array che contiene i risultati della query, se vuoi vederli tutti puoi provare in questo modo
    [php]while ($prova3=mysql_fetch_array($prova2))
    {
    $userid4=$prova3['id_azienda'];
    print "azienda: ".$userid4."<br>";
    }
    [/php]
    😉

    ora mi stai facendo venire il dubbio di non aver messo il ciclo while...
    Comunque non voglio che mi stampi tutti i risultati ma che mi controlli le aziende e mi stampi solo l'azienda che abbia come dipendente un determinato cognome.
    Il problema è che se ci sono 2 cognomi uguali mi stamperebbe tutti e due le aziende e tutti e 2 i dipendenti e io non voglio questo.
    Voglio che mi stampi solo l'azienda presso cui fa parte il dipendente che ho selezionato...
    Non so se mi spiego...


  • Consiglio Direttivo

    @maubox8 said:

    Il problema è che se ci sono 2 cognomi uguali mi stamperebbe tutti e due le aziende e tutti e 2 i dipendenti e io non voglio questo.
    Se vuoi che te ne esca solo uno (a caso) metti LIMIT 1 nella query 😉


  • User Attivo

    @Samyorn said:

    Se vuoi che te ne esca solo uno (a caso) metti LIMIT 1 nella query 😉

    ehmm, non voglio che me ne esca uno a caso, ma quello di quella determinata azienda...


  • Consiglio Direttivo

    Ah, non avevo capito.
    Allora nella query inserisci:
    ....WHERE cognome='$tipo2' AND azienda='$nome_azienda'";


  • User Attivo

    @Samyorn said:

    Ah, non avevo capito.
    Allora nella query inserisci:
    ....WHERE cognome='$tipo2' AND azienda='$nome_azienda'";

    ok, fino qui ci sono, pero' quale valore gli do' a $nome_azienda?
    Cioè vorrei dare il valore della azienda che ho selezionato nella pagina prima..


  • Consiglio Direttivo

    Allora dovrai fare una subquery, solo che mi sfugge qualcosa credo, nella query ti tiri fuori il valore di id_azienda, ma se già lo sai che azienda è....:?


  • User Attivo

    @Samyorn said:

    Allora dovrai fare una subquery, solo che mi sfugge qualcosa credo, nella query ti tiri fuori il valore di id_azienda, ma se già lo sai che azienda è....:?

    aspetta, provo a mostrarti brevemente i codici:

    1° file) archivio_dip1.php

    $query="SELECT * FROM tbl_users WHERE user_name='".$_SESSION['logged'][0]."'" ;
    $result = mysql_query($query,$connessione);
    $row = mysql_fetch_array($result);
    $userid = $row[0];
    print "<br>";
    print "utente n° "."$userid"."<br>";

    $azie = "SELECT * FROM anag_ditta WHERE id_utenteee= $userid order by ragione_sociale";
    $result = mysql_query($azie,$connessione);
    while($row = mysql_fetch_array($result)) {
    echo "<br>";

    echo "<a href="archivio_dip2.php?tipo=" . $row[2] . ""><b>".$row[2]."</b></a>";
    //DA QUI SELEZIONO L'AZIENDA

    2° file) archivio_dip2.php

    $tipo=$_GET['tipo'];
    print "<br>";
    print "ditta: "."$tipo"."<br>"; //stampa l'azienda

    //recupero i dati dell'archivio dipendenti dal database
    $dipe = "SELECT * FROM anag_dip WHERE id_azienda= '$tipo' order by cognome";
    $result3 = mysql_query($dipe,$connessione);
    while($row3 = mysql_fetch_array($result3)) {
    echo "<br>";
    //$row3[3]= stampa tutti i dipendenti

    echo "dip: "."<a href="dettaglio_dipe.php? tipo2=" . $row3[3] . ""><b>".$row3[3]."&nbsp".$row3[4]."</b></a>";

    3° file) dettaglio.dipe.php

    $tipo2=$_GET['tipo2'];

    $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2'" ;
    $prova2 = mysql_query($prova1,$connessione);
    $prova3 = mysql_fetch_array($prova2);
    $userid4 = $prova3[0];
    print "<br>";
    print "azienda: "."$userid4"."<br>";//E' QUESTA VARIABILE CHE NON VA BENE

    $dipe = "SELECT * FROM anag_dip WHERE cognome = '$tipo2' and id_azienda = '$userid4'";

    $result = mysql_query($dipe,$connessione);
    while($row = mysql_fetch_array($result)) {

    print $row[4];

    ecc . ecc...

    Lo so, è tutto un po' incasinato, ma il problema è questa variabile $userid4.
    In realtà vorrei che vedessi il nome dell'azienda e i dati dipendente il cui cognome fa parte di quella azienda.
    Invece (come mi sta succedendo), nel caso di 2 cognomi uguali in aziende diverse, mi stampa la prima che trova e i relativi dati del dipendente a cui fa parte, e io voglio quelli dell'azienda selezionata...
    Mi spiego?


  • Consiglio Direttivo

    Se le inserisci così per il futuro si capisce meglio 😉
    1° file) archivio_dip1.php
    [php]$query="SELECT * FROM tbl_users WHERE user_name='".$_SESSION['logged'][0]."'" ;
    $result = mysql_query($query,$connessione);
    $row = mysql_fetch_array($result);
    $userid = $row[0];
    print "<br>";
    print "utente n° "."$userid"."<br>";

    $azie = "SELECT * FROM anag_ditta WHERE id_utenteee= $userid order by ragione_sociale";
    $result = mysql_query($azie,$connessione);
    while($row = mysql_fetch_array($result)) {
    echo "<br>";

    echo "<a href="archivio_dip2.php?tipo=" . $row[2] . ""><b>".$row[2]."</b></a>";
    //DA QUI SELEZIONO L'AZIENDA..ok
    [/php]

    2° file) archivio_dip2.php
    [php]$tipo=$_GET['tipo'];
    print "<br>";
    print "ditta: "."$tipo"."<br>"; //stampa l'azienda

    //recupero i dati dell'archivio dipendenti dal database
    $dipe = "SELECT * FROM anag_dip WHERE id_azienda= '$tipo' order by cognome";
    $result3 = mysql_query($dipe,$connessione);
    while($row3 = mysql_fetch_array($result3)) {
    echo "<br>";
    //$row3[3]= stampa tutti i dipendenti

    echo "dip: "."<a href="dettaglio_dipe.php? tipo2=".$row3[3]."?tipo=".$tipo.""><b>".$row3[3]."&nbsp".$row3[4]."</b></a>"; //modificalo così
    [/php]

    3° file) dettaglio.dipe.php
    [php]$tipo=$_GET['tipo']; // aggiungi questo
    $tipo2=$_GET['tipo2'];

    $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda=(SELECT user_id FROM anag_ditta WHERE ragione_sociale='$tipo')" ; // varia questo
    $prova2 = mysql_query($prova1,$connessione);
    $prova3 = mysql_fetch_array($prova2);
    $userid4 = $prova3[0];
    print "<br>";
    print "azienda: "."$userid4"."<br>"; // credo dovrebbe andare adesso

    $dipe = "SELECT * FROM anag_dip WHERE cognome = '$tipo2' and id_azienda = '$userid4'";

    $result = mysql_query($dipe,$connessione);
    while($row = mysql_fetch_array($result)) {

    print $row[4];

    ecc . ecc...
    [/php]
    Credo ora dovrebbe andare 😄


  • User Attivo

    @Samyorn said:

    Se le inserisci così per il futuro si capisce meglio 😉
    1° file) archivio_dip1.php
    [php]$query="SELECT * FROM tbl_users WHERE user_name='".$_SESSION['logged'][0]."'" ;
    $result = mysql_query($query,$connessione);
    $row = mysql_fetch_array($result);
    $userid = $row[0];
    print "<br>";
    print "utente n° "."$userid"."<br>";

    $azie = "SELECT * FROM anag_ditta WHERE id_utenteee= $userid order by ragione_sociale";
    $result = mysql_query($azie,$connessione);
    while($row = mysql_fetch_array($result)) {
    echo "<br>";

    echo "<a href="archivio_dip2.php?tipo=" . $row[2] . ""><b>".$row[2]."</b></a>";
    //DA QUI SELEZIONO L'AZIENDA..ok
    [/php]

    2° file) archivio_dip2.php
    [php]$tipo=$_GET['tipo'];
    print "<br>";
    print "ditta: "."$tipo"."<br>"; //stampa l'azienda

    //recupero i dati dell'archivio dipendenti dal database
    $dipe = "SELECT * FROM anag_dip WHERE id_azienda= '$tipo' order by cognome";
    $result3 = mysql_query($dipe,$connessione);
    while($row3 = mysql_fetch_array($result3)) {
    echo "<br>";
    //$row3[3]= stampa tutti i dipendenti

    echo "dip: "."<a href="dettaglio_dipe.php? tipo2=".$row3[3]."?tipo=".$tipo.""><b>".$row3[3]."&nbsp".$row3[4]."</b></a>"; //modificalo così
    [/php]

    3° file) dettaglio.dipe.php
    [php]$tipo=$_GET['tipo']; // aggiungi questo
    $tipo2=$_GET['tipo2'];

    $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda=(SELECT user_id FROM anag_ditta WHERE ragione_sociale='$tipo')" ; // varia questo
    $prova2 = mysql_query($prova1,$connessione);
    $prova3 = mysql_fetch_array($prova2);
    $userid4 = $prova3[0];
    print "<br>";
    print "azienda: "."$userid4"."<br>"; // credo dovrebbe andare adesso

    $dipe = "SELECT * FROM anag_dip WHERE cognome = '$tipo2' and id_azienda = '$userid4'";

    $result = mysql_query($dipe,$connessione);
    while($row = mysql_fetch_array($result)) {

    print $row[4];

    ecc . ecc...
    [/php]
    Credo ora dovrebbe andare 😄

    cavolo, non avrei potuto mai ragionare cos' bene... Pero' mi da un errore:

    Notice: Undefined index: tipo in C:\Programmi\EasyPHP 2.0b1\www\pagina privata con SESSIONI-prova smanetto\dettaglio_dipe.php on line 62

    azienda:
    dipendente beviglia?tipo=Rnc sas

    La riga 62 è dove c'è $tipo=$_GET['tipo'];


  • User Attivo

    @maubox8 said:

    cavolo, non avrei potuto mai ragionare così bene... Pero' mi da un errore:

    Notice: Undefined index: tipo in C:\Programmi\EasyPHP 2.0b1\www\pagina privata con SESSIONI-prova smanetto\dettaglio_dipe.php on line 62

    azienda:
    dipendente beviglia?tipo=Rnc sas

    La riga 62 è dove c'è $tipo=$_GET['tipo'];

    probabilmente c'è qualcosa che non va nel passaggio di archivio_dip2.php:
    echo "dip: "."<a href="dettaglio_dipe.php? tipo2=".$row3[3]."?tipo=".$tipo.""><b>".$row3[3]."&nbsp".$row3[4]."</b></a>";


  • Consiglio Direttivo

    Si perchè ho sbagliato 😄
    varia questo:
    [php]...dettaglio_dipe.php?tipo2=".$row3[3]."&tipo=".$tipo."...[/php]


  • User Attivo

    @Samyorn said:

    Si perchè ho sbagliato 😄
    varia questo:
    [php]...dettaglio_dipe.php?tipo2=".$row3[3]."&tipo=".$tipo."...[/php]

    grazie...stavo lavorando proprio su quello! Ora non da più errore pero' ora non mi stampa il nome dell'azienda, mi stampa solo il cognome dipendente e senza i dettagli...
    😞


  • User Attivo

    trovato!
    Dovevo mettere ragione_sociale anzichè user_id

    $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda=(SELECT ragione_sociale FROM anag_ditta WHERE ragione_sociale='$tipo')" ;

    Grazie! Sei un grande!!
    Vorrei essere al tuo livello!


  • Consiglio Direttivo

    @maubox8 said:

    trovato!
    Dovevo mettere ragione_sociale anzichè user_id

    $prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda=(SELECT ragione_sociale FROM anag_ditta WHERE ragione_sociale='$tipo')";
    :mmm: scusa id_azienda di anag_dip è ragione_sociale di anag_ditta??
    credevo fosse user_id di anag_ditta.....:?
    se id_azienda di anag_dip è ragione_sociale di anag_ditta allora puoi evitare la subquery e scrivere direttamente:
    [php]$prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda='$tipo'";[/php]

    @maubox8 said:

    Grazie! Sei un grande!!
    Vorrei essere al tuo livello!😊


  • User Attivo

    @Samyorn said:

    :mmm: scusa id_azienda di anag_dip è ragione_sociale di anag_ditta??
    credevo fosse user_id di anag_ditta.....:?
    se id_azienda di anag_dip è ragione_sociale di anag_ditta allora puoi evitare la subquery e scrivere direttamente:
    [php]$prova1="SELECT id_azienda FROM anag_dip WHERE cognome='$tipo2' AND id_azienda='$tipo'";[/php]

    😊

    esattamente!
    Perfetto, ho tolto la subquery!
    Grazie ancora!


  • Consiglio Direttivo

    de nada 😉