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

    [php] differenza tra campi tra 2 tabelle

    Ciao a tutti..
    io ho creato due tabelle, A e B, una che contiene una colonna con id INT autoincrement + alcuni campi, e un'altra che contiene lo stesso id copiato (INT ma ovviamente non autoincrement) + altri campi.

    Ora io dovrei fare un confronto tra le due tabelle. A video dovrei restituire gli id che sono appartenenti alla tabella A ma non alla tabella , facendo una differenza.

    Vale a dire

    A {1,2,3,4,5,6}
    B {2,4,5}

    A video dovrei avere i valori 1,3,6.
    Come potrei affrontare il problema attraverso una query?
    Io ho provato con un

    codice:
      SELECT * FROM a,b WHERE A.id != B.id
    ma sembra non funzionare correttamente.
    Se per esempio B è ancora vuoto, lui mi dà errore. E poi anche con elementi presenti in B, il problema è che avvengono strane duplicazioni degli elementi.

    Qualcuno può darmi una dritta?
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  2. #2
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Se hai mysql >=4.1:

    SELECT ID FROM A WHERE ID NOT IN (SELECT ID FROM B)

    Altrimenti

    SELECT A.ID FROM A LEFT JOIN B ON A.ID=B.ID WHERE B.ID IS NULL

  3. #3
    Adesso provo e ti faccio sapere!

    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  4. #4

    Non funziona

    La mia versione è la 4.0.17

    Forse è meglio se aggiungo qualche dettaglio.

    La tabella A e la B contengono questi campi con i seguenti nomi:

    A
    ---------

    id_gruppo (INT auto_increment)
    gruppo


    B
    ---------
    id_camp (INT)
    id_grupp


    A questo punto vale la cosa di prima. Devo fare in modo di estrarre tutti i gruppi da A che non siano già presenti con l'id anche in B, ponendo anche una condizione aggiuntiva, vale a dire che id_camp della tabella B sia uguale a un certo $id ricavato dalla pagina.

    Concettualmente dovrebbe essere con il left join.
    codice:
     SELECT * FROM A LEFT JOIN B ON A.id_gruppo = B.id_grupp WHERE B.id_grupp IS NULL AND id_camp = '$id'
    Rappresentazione attraverso i valori.

    A
    -----
    1
    2
    3
    4


    B
    -------
    2 5
    3 5
    1 2
    4 5

    A questo punto $id in B è uguale a 5.

    I valori che dovrebbe estrarre è 1.

    Suggerimenti sulla query?
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  5. #5
    up
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  6. #6
    Originariamente inviato da Blue_savana
    up
    Qualcosa non quadra.....

    Se A contiene gli id da 1 a 4 la tabella B relazionata tramite questo A.id , contiene 5 rende il db inconsistente.

    Oppure rimetti il nome campo sopra le colonne che rappresenti...

    In ogni caso se il dato A assente in B si trova con:

    codice:
    SELECT * 
    FROM A 
    LEFT JOIN B 
    ON A.id_gruppo = B.id_grupp 
    WHERE A.id_grupp IS NULL
    AND id_camp = '$id'
    Query parlata....

    seleziona A in congiunzione con B
    Dove A.id_gruppo = B.id_grupp

    Poiche' la JOIN rende NULL in B in corrispondenza del dato assente:

    dove A.id_grupp IS NULL

    In altre parole si puo' trovare quello che c'e' non quello che non c'e'..... preciso meglio .... se manca l'id 5 in B, manca anche il record.



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

  7. #7
    Scusami, la serie dati in B deve essere invertita.
    ID campagna con i vari 5 è sulla sinistra.

    Continua a non funzionare...
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  8. #8
    Originariamente inviato da Blue_savana
    Scusami, la serie dati in B deve essere invertita.
    ID campagna con i vari 5 è sulla sinistra.

    Continua a non funzionare...
    Se la inverti e' peggio.... avresti id duplicati di B.

    Rimetti lo schemino con i nomi di campo...

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

  9. #9
    Grazie per la tua pazienza!

    A
    -----------
    id_gruppo Gruppo
    -------------
    1 Gruppo_x
    2 Gruppo_z
    3 Gruppo_y
    4 Gruppo_k


    B (nb. gli id contenuti non sono chiavi primarie)
    -----------
    id_gruppo id_camp
    ------------------
    1 5
    3 5
    4 3
    4 5
    2 1


    A questo punto, con id_camp = '$id'(5) dovrebbe uscire 2, perché è l'elemento mancante in B!!!
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

  10. #10
    Continua a passarmi 0 elementi!
    Io voglio che visualizza gli elementi di A che mancano in B, con la clausola di $id in B.
    "La grandezza dell'uomo si misura in base a quel che cerca e all'insistenza con cui egli resta alla ricerca".

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 © 2024 vBulletin Solutions, Inc. All rights reserved.