Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    3 left join con 2 tabelle. Errore

    mi potete spiegare per favore perchè questo codice va in errore? grazie
    Codice PHP:
    $mysqlc->query("SELECT tab1.*, tab2.id AS provinciaid, tab2.id AS regionid, tab3.id AS
    tipoid FROM tab1 LEFT JOIN tab2 ON tab1.regione=tab2.id LEFT JOIN tab3 ON
    tab1.tipo=tab3.id LEFT JOIN tab2 ON tab1.provincia=tab2.id WHERE tab1.id='"
    .$_GET['id']."';"); 
    ---------------------------
    danielix05

  2. #2
    Che errore ti da?
    firma in costruzione

  3. #3
    Semplicemente, se vuoi usare due volte la stessa tabella in due join differenti (cosa che comunque non mi pare molto sensata, se una tabella contiene le province non conterrà anche le regioni, e comunque la regione dovrebbe essere assegnata alla provincia...) devi usare la clausola AS per dare due alias diversi ai due richiami:

    SELECT * FROM tab0 LEFT JOIN tab1 ON ... AS tabA LEFT JOIN tab1 ON ... AS tabB

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  4. #4

    ho fatto così

    Codice PHP:
    SELECT tab0.*, tab3.id AS tipoid FROM tab0 LEFT JOIN tab1 AS regioni ON
    tab0
    .regione=regioni.id LEFT JOIN tab1 AS prov ON tab0.provincia=prov.id
    LEFT JOIN tab3 ON tab0
    .tipo=tab3.id WHERE tab0.id='".$_GET['id']."'
    non mi dà errori ma non in questo modo non riesco a recuperare i valori dei left

    più in basso ho due select dinamiche: una per le prov e una per le regioni
    Codice PHP:
                <select name="provincia" class="formtext">
                        <option value="0"> - - - </option>
                        <?php
                            $mysqlc
    ->query("SELECT * FROM tab1;");
                        
                            while(
    $result mysql_fetch_array($mysqlc->resultMYSQL_ASSOC)){
                        
                                echo 
    "<option";
                        
                                if(
    $result['id'] == $result1['prov']) echo " selected=\"selected\"";
                        
                                echo 
    " value='".$result['id']."'>".$result['regione']."</option>";
                        
                            }
                        
    ?>
                </select>
    in pratica, nella tab1, nello stesso campo chiamato "regione", ho messo sia le province sia le regioni. ogni record ovviamente ha un id diverso. Mi serve fare in questo modo.

    come faccio a recuperare, p. esempio, il valore $result1['prov'])?
    ---------------------------
    danielix05

  5. #5
    Perdonami, ma che cosa hai nella tabella tab0?

    Tieni presente che la left join funziona così: per ogni record che trova in tab0, verifica se esiste un record in tab1 che abbia la clausola ON vera, e di quel SINGOLO record ti restituisce i campi...

    Quindi, NON puoi aspettarti di avere nei risultati di una query del genere tutte le provincie, ma avrai SOLO le province che hanno almeno un record in tab0 che gli si riferisca, e se in tab0 ci sono per esempio 5 record che si riferiscono alla provincia di Roma, tu vedrai 5 volte la provincia "Roma"...

    Mi sono fatto capire?
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    Ah, e un piccolo consiglio: quello che hai fatto, ovvero che in un campo chiamato regione tu metti sia delle regioni che delle province, è una PESSIMA idea, che ti porterà un sacco di grattacapi in futuro...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7

    Re: ho fatto così

    Originariamente inviato da danielix05
    Codice PHP:
    SELECT tab0.*, tab3.id AS tipoid FROM tab0 LEFT JOIN tab1 AS regioni ON
    tab0
    .regione=regioni.id LEFT JOIN tab1 AS prov ON tab0.provincia=prov.id
    LEFT JOIN tab3 ON tab0
    .tipo=tab3.id WHERE tab0.id='".$_GET['id']."'
    non mi dà errori ma non in questo modo non riesco a recuperare i valori dei left
    Comunque c'è ancora qualcosa che non va: fai delle left join verso tab1 come regioni e tab1 come prov, ma poi non prendi nessun campo da loro...

    SELECT tab0.*, prov.campo1, regioni.campo2, tab3.id AS tipoid FROM tab0
    LEFT JOIN tab1 AS regioni ON tab0.regione=regioni.id
    LEFT JOIN tab1 AS prov ON tab0.provincia=prov.id
    LEFT JOIN tab3 ON tab0.tipo=tab3.id
    WHERE tab0.id='".$_GET['id']."';
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8

    la tabella 0

    eccomi qua
    la tab0 contiene id | nome | tipo |
    all'interno ho messo p.es.
    1 | lombardia | R
    ...
    100 | milano | P

    r= regione
    p= provincia

    tale che, nell'invio di una newsletter posso scegliere se inviare a tutta la regione (passando id 1) oppure alla sola provincia con l'id 100

    poi nelle select ho bisogno di ricavare in una l'id della regione e in una della provincia per mostrare quale sono state le opzioni salvate in precedenza
    ---------------------------
    danielix05

  9. #9
    A parte che ribadisco che non dovresti assolutamente tenere province e regioni nella stessa tabella, anche perchè questo ti costringe ad indicare nella tabella degli iscritti sia il codice della regione che quello della provincia, avendo così una situazione in cui un iscritto può fare parte della provicia di roma e anche della regione liguria, cosa che chiaramente non ha senso, comunque se la tab0 è quella che contiene province e regioni, allora che cosa contiene tab1?
    E quale sarebbe la tabella degli iscritti?
    Se non fai un po' di chiarezza non si capisce niente...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

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.