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

    [mysql] padre-figlio-nipote

    'Sera, ho un db struttura grosso modo così:

    TABELLA1:
    id | nome | parent

    TABELLA2:
    id | nome | id_tab1

    in tabella1 ho dei record che possono essere del tipo padre->figlio->nipote
    Quindi ad esempio:
    -recordA = parent NULL
    -recordB = parent recordA
    -recordC = parent recordB

    in tabella2 ho dei record in cui id_tab1 fa riferimento agli id della tabella1 ma solo per i recordC (cioè nipote)

    Come posso far riferimento ad un certo id del recordA sapendo il recordB (attraverso il parent dei recordC)?
    Cioè, come faccio a ricavarmi gli id del recordB e, nella stessa query, riferirmi ad un certo id dei recordA?

    Sono stato spiegato?


    Ciaooooo!!!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  2. #2
    Semplicemente, fai una query sulla tabella2, con una left join alla tabella1, dopodichè puoi aggiungere tute le condizioni where che vuoi per selezionare secondo il campo che vuoi; naturalmente, non puoi selezionare cotemporaneamente per un id e per un altro, per cui eventualmente dovrai fare una subquery:

    (select parent from tabella1 where id=RecordC)

    Questa query ti restituisce il padre del recordC, dopodichè

    select parent from tabella1 where id=(select parent from tabella1 where id=RecordC)

    Questa ti restituisce il nonno del recordC.

    Ti sono stato d'aiuto? Spero di si.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    Ecco appunto, io già uso un JOIN per estrarre dati da entramen le tabelle usando una sola query, e volevo fare quello che tu mi dici che non si può fare , ovviamente senza la subquery (non supportate dalla ver a disposizione).

    Grazie mille lo stesso

    Altri suggerimenti?


    Ciaoooo!!!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  4. #4
    Senza subquery è impossible in una sola query; devi fare tu le due query precedenti e poi usarne il valore restituito nella query finale.
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    mmm avevo pensato di fare una JOIN per la stessa tabella, in modo da creare un alias per il campo parent e recuperare poi l'altro parent che mi interessa... volo troppo con la fantasia??


    Ciaooo!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    SELECT b.id as recordb, a.id as recorda
    FROM tabella1 as c
    LEFT JOIN tabella1 as b on c.parent = b.id
    LEFT JOIN tabella1 as a on b.parent = a.id
    WHERE c.id = 'valoreCheTiPare'


    A cosa serva l'altra tabella non l'ho capito però :master:

  7. #7
    Ho fatto alcune prove con la soluzione suggerita, ma mi restituisce: Cross dependency found in OUTER JOIN. Examine your ON conditions.

    L'altra tabella mi serve perchè io devo ottenere i record in essa contenuta, questi record hanno un campo che si riferisce agli ID di alcuni record nipoti della prima tabella.
    E quello che sono risucito ad ottenere ora (cioè all'inizio) è solo il riferimento al padre conoscendo l'ID del nonno.


    Ciaooooo!!!!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da debug
    Ho fatto alcune prove con la soluzione suggerita, ma mi restituisce: Cross dependency found in OUTER JOIN. Examine your ON conditions.
    Non mi risulta.
    Hai copiato bene?

  9. #9
    Ho dovuto modificare il tuo esempio per adattarlo a quello che sto facendo!

    Forse è utile postarlo, eccovelo:

    SELECT u.id, u.nome_arte, u.foto, u.hits, u.operante, u.sesso, u.nascita, u.city, x.id, y.id, c.nome AS nomesottocat FROM users AS u INNER JOIN users_cat AS c ON u.id_tipo=c.id LEFT JOIN users_cat AS x ON y.parent=x.id LEFT JOIN users_cat AS y ON x.id=y.parent WHERE y.parent='".ID_ARTISTI."' AND u.attivato='1' ORDER BY u.hits DESC

    Cosa ho toppato?



    Ciaooo!!!!!
    Originariamente inviato da kalamaro
    una volta avevate linkato la pagina di un software per eliminare i ciao! di debug dai post, ho provato nel mio negozio di fiducia a scaffale non lo hanno, vi ricordate il nome?

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    codice:
    SELECT u.id, u.nome_arte, u.foto, u.hits, u.operante, u.sesso, 
    u.nascita, u.city, x.id, y.id, c.nome AS nomesottocat
    FROM users AS u 
    INNER JOIN users_cat AS c ON u.id_tipo=c.id 
    LEFT JOIN users_cat AS x ON c.parent=x.id  <-- QUESTO!!!
    LEFT JOIN users_cat AS y ON x.id=y.parent 
    WHERE y.parent='".ID_ARTISTI."' AND u.attivato='1' ORDER BY u.hits DESC

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.