Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Trovare un ID in N tabelle.

    Salve!
    Passo subito al dunque.
    Ho la classica tabella clienti.
    Ogni cliente ha una ID unica.
    Ho altre N tabelle (diciamo per questo esempio 4) dove in ognuna di esse ci POTREBBE essere l'ID del cliente.

    La query dovrebbe fare:

    Se l'ID cliente è presente in ALMENO UNA TABELLA, fai questo, altrimenti fai quest'altro....

    Ho provato e riprovato ma sono in un vicolo cieco angusto e tenebroso.
    Aiut!

  2. #2
    E' con un pò di vergogna che ritiro su questo topic, pensavo di aver risolto ma non funziona.
    In pratica facevo così:
    Codice PHP:
    $query="
    SELECT * FROM 
    tabella1,
    tabella2,
    tabella3
    WHERE 
    tabella1.id='1' OR
    tabella2.id='1' OR
    tabella3.id='1'"
    ;
    $result=mysql_query($query);
    if(
    mysql_num_rows($result)!=0)
    {
    print
    "trovata corrispondenza";
    }
    else
    {
    print
    "Nessuna corrispondenza trovata";

    Funziona, ma solo ne caso in cui tutte le tabelle abbiano all'interno dei record.
    Se anche una sola delle tabelle è vuota, ma nelle altre è vera la corrispondenza, (cioè è inserito un ID=1) mi dice che non trova nessuna corrispondenza.
    C'è qualche anima pia che mi aiuta?

    Un salutone

  3. #3
    Prova con left join

    codice:
    SELECT * 
    FROM tabella1 t1,
    left join tabella2 t2 on t2.id = t1.id
    left join tabella3 t3 on t3.id = t1.id
    where t1.id = '$id'

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Provato.
    Stesso risultato.
    Il problema si pone quando una tabella non ha valori perchè i valori NULL non restituiscono nè vero nè falso.
    Codice PHP:
    SELECT 
    FROM tabella1 t1,
    left join tabella2 t2 on t2.id t1.id
    left join tabella3 t3 on t3
    .id t1.id
    where t1
    .id '$id' 
    Nel caso in cui la tabella 2 sia vuoto ma la tabella 3 abbia un ID=$id, restituisce comunque "nessuna corrispondenza" anche se in realtà nella tabella 3 c'è un ID=$id.

    Cribbio!
    Ma come si fa?

  5. #5
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Fai 3 query con 3 count e risolvi il problema, tanto il tempo di esecuzione è minimo.

  6. #6
    [supersaibal]Originariamente inviato da PazZII
    Provato.
    Stesso risultato.
    Il problema si pone quando una tabella non ha valori perchè i valori NULL non restituiscono nè vero nè falso.

    Ma come si fa? [/supersaibal]
    guarda che left join restituisce TUTTI i risultati della tabella di SX, rendendo NULL se mancano nella DX.

    Inverti i termini della comparazione oppure usa RIGHT JOIN invece di LEFT JOIN.

    Non so come e' la struttura del tuo db. Ti dico solo che si puo' con un LEFT / RIGHT JOIN.

    Si suppone che una delle tabelle "DEVE" avere tutti i valori.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    In rif. a Teuzzo

    sì lo pensavo anche io ma è brutto!
    mmm...chessò, qualcosa tipo:
    Codice PHP:
    $query_ctrl="
    SELECT * FROM 
    tabella1,
    tabella2,
    tabella3
    WHERE 
    (tabella1.id='1'IS NOT NULL) OR
    (tabella2.id='1'IS NOT NULL) OR
    (tabella3.id='1'IS NOT NULL)"

    bò...
    provo

  8. #8
    [supersaibal]Originariamente inviato da piero.mac
    guarda che left join restituisce TUTTI i risultati della tabella di SX, rendendo NULL se mancano nella DX.

    Inverti i termini della comparazione oppure usa RIGHT JOIN invece di LEFT JOIN.

    Non so come e' la struttura del tuo db. Ti dico solo che si puo' con un LEFT / RIGHT JOIN.

    Si suppone che una delle tabelle "DEVE" avere tutti i valori. [/supersaibal]
    Dunque, ragionando con un esempio concreto.
    Ho una tabella utenti e, supponiamo, altre 3 tabelle: prenotazioni, ordini, fatture.
    Devo vedere in pratica, se l'utente con ID=N ha una corrispondenza in almeno una delle tabelle prenotazioni, ordini, fatture.
    Il problema nasce dal fatto che potrebbe avere 100 prenotazioni ma nessuna fattura, come 100 prenotazioni, 10 ordini e nessuna fattura.
    Quindi il risultato della tabella fattura è nullo.
    Aiuto mi sto perdendo.

  9. #9
    Moderatore di Macintosh e software L'avatar di olivs
    Registrato dal
    Jan 2001
    Messaggi
    8,906
    non fai prima a usare un count?
    SELECT COUNT(*) FROM tabelle WHERE ID=1
    Poi testi COUNT che se è maggiore di 0 allora esiste una corrispondenza

  10. #10
    [supersaibal]Originariamente inviato da olivs
    non fai prima a usare un count?
    SELECT COUNT(*) FROM tabelle WHERE ID=1
    Poi testi COUNT che se è maggiore di 0 allora esiste una corrispondenza [/supersaibal]
    sì infatti.... certe volte mi faccio troppi problemi...
    Per ora ciao e 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.