Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25

    [mysql] seleziona un record il cui id è uguale a quello di un altro record

    ciao a tutti,
    ringrazio l'anima pia che mi aiuterà. Sto sviluppando un sistema di commenti

    ho una tabella con 4 campi

    id (auto increment)
    commento
    utente
    id topic

    ho fatto una query dove seleziono il "commento" in cui "id commento" è uguale ad un valore di un'altra tabella

    ho fatto un 'altra query uguale per "utente"

    tale "commento" però deve matchare con "utente" il quale quindi deve avere lo stesso "id" di "commento" come posso fare tale query?
    ossia come posso dire a mysql "trovami il commento che abbia lo stesso "id" (e quindi che si trovi sulla stessa riga) di "utente" ?

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Non si capisce... hai una tabella o due? come e' fatta l'altra tabella? detto in italiano... devi estrarre il commento di un certo utente o non ci ho capito nulla? insomma: qual'e' il dato di partenza?
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    esatto devo estrarre il commento di un certo utente e stamparlo

    per utente e commento ho fatto due diversi Resultset, e poi li ho inseriti dentro all'html per visualizzarli, il risultato c'è in modo disordinato... devo quindi riuscire a dirgli di darmi solo l'utente e commento appartenenti alla stessa riga capito?

  4. #4
    Per queste cose esiste la SELECT con JOIN delle due tabelle.

    Select i campi che vuoi
    from tab1
    inner join tab2 ON tab1.id_commento = tab2.id_commento
    where quel che ti pare

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

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    piero.mac ti ringrazio !! anche io ho fatto la query che mi hai consigliato, anzi per la precisione ne ho fatte tre, una per il commento, una per l'utente ed una per i like di ciascun commento adesso però mi serve il passo successivo ossia questi campi (nella tua query chiamati "i campi che vuoi ") devono avere tutti lo stesso id nella tab.2, altrimenti rischio che mi vengono abbinati in modo diverso i commenti con le persone ed i voti.

    come posso fare?
    le soluzioni sono due:
    1- o estendo la query in un modo che non conosco e gli chiedo, oltre a quello che abbiamo scritto, di selezionare valori sulla stessa riga,

    2- oppure tramite dei while annidati stampo un result.next () per ogni query, ma ho provato tutte le combinazioni e non mi viene !

    SONO IN UN VICOLO CIECO AIUTO!!
    Ultima modifica di cobbra; 15-10-2014 a 15:38

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da piero.mac Visualizza il messaggio
    Per queste cose esiste la SELECT con JOIN delle due tabelle.

    Select i campi che vuoi
    from tab1
    inner join tab2 ON tab1.id_commento = tab2.id_commento
    where quel che ti pare

    piero.mac ti ringrazio !! anche io ho fatto la query che mi hai consigliato, anzi per la precisione ne ho fatte tre, una per il commento, una per l'utente ed una per i like di ciascun commento adesso però mi serve il passo successivo ossia questi campi (nella tua query chiamati "i campi che vuoi ") devono avere tutti lo stesso id nella tab.2, altrimenti rischio che mi vengono abbinati in modo diverso i commenti con le persone ed i voti.

    come posso fare?
    le soluzioni sono due:
    1- o estendo la query in un modo che non conosco e gli chiedo, oltre a quello che abbiamo scritto, di selezionare valori sulla stessa riga,

    2- oppure tramite dei while annidati stampo un result.next () per ogni query, ma ho provato tutte le combinazioni e non mi viene !

    SONO IN UN VICOLO CIECO AIUTO!!

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non ho capito come sono strutturate le tue tabelle. Poi non ho capito la storia dei voti. È un'altra tabella ? Infine non ho capito il like sui commenti.

    Se hai delle tabelle le cui strutture assomigliano a quelle sotto.

    select u.id_utente, nome, cognome, commento
    from utenti u
    inner join commenti c on u.id_utente = c.id_utente


    ti dà tutti i commenti di tutti gli utenti. Se vuoi poi i commenti di un singolo utente devi aggiungere la clausola where (esempio : where nick = 'badaze')

    codice HTML:
    Tabella : utenti
    id_utente,
    nick, 
    nome,
    cognome,
    etc...
    
    Tabella : commenti
    id_commento,
    commento,
    id_utente
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Non ho capito come sono strutturate le tue tabelle. Poi non ho capito la storia dei voti. È un'altra tabella ? Infine non ho capito il like sui commenti.

    Se hai delle tabelle le cui strutture assomigliano a quelle sotto.

    select u.id_utente, nome, cognome, commento
    from utenti u
    inner join commenti c on u.id_utente = c.id_utente


    ti dà tutti i commenti di tutti gli utenti. Se vuoi poi i commenti di un singolo utente devi aggiungere la clausola where (esempio : where nick = 'badaze')

    codice HTML:
    Tabella : utenti
    id_utente,
    nick, 
    nome,
    cognome,
    etc...
    
    Tabella : commenti
    id_commento,
    commento,
    id_utente

    ecco tutto

    ok allora ci riprovo... considera che non mi ha scritto nessuno quindi probabilmente ho sbagliato qualcosa io ... ma sono veramente arrivato ad un punto morto e non so come proseguire.





    ho due tabelle :


    una classifiche che ha le seguenti colonne (id (auto increment) - TOPIC - UTENTI)
    una commenti che ha ( voti, commento, nome_ut_comm, id_ classifica, id (auto increment) )

    una persona fa un topic, successivamente questo topic appare ed un'altra persona commenta, inserendo il proprio nome ed il commento. Tale commento poi sarà possibile votarlo, per cui il campo "voti" parte da zero.


    quando una persona commenta, automaticamente il campo "commenti.id_classifica" diventa uguale al campo classifiche.ID, in modo che i commenti vadano a finire sotto il giusto topic e non da un'altra parte.


    sono riuscito a creare il topic ed anche ad inserire i commenti, e l'utente nel db ora devo fare apparire i voti, i commenti e il nome degli utenti che lasciano un commento in modo ordinato



    ho fatto 3 query resultset di questo tipo


    SELECT commento FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica)

    SELECT nome_ut_comm FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica
    SELECT voti FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica



    in poche parole gli ho detto di prendermi il nome, il voto ed il commento dei commenti lasciati in un determinato topic (id from classifiche)

    ho quindi dato vita a 3 while, uno per ognuno di questi resultset, e li ho necessariamente dovuti annidare perchè venisse fuori un unico commento con il nome dell'utente ed il voto, ogni volta che venissero rispettati i requisiti di cui alla query


    alla fine di questi while c'è quindi il codice html per stampare i risultati. Se vedi la passata email il while lo dovresti trovare facilmente


    Il problema è che annidando i while succedono cose strane perchè l'unico ciclo che mi viene fatto completamente e correttamente è l'ultimo (nella fattispecie il rs relativo ai nomi di chi lascia un commento.) mentre gli altri raddoppiano e triplicano i risultati. Inoltre se inserisco dei break e dei continue mi appaiono i commenti non duplicati ma sono accoppiati a voti e ad utenti spaiati perchè il ciclo completo viene compiuto solo per l'ultimo while mentre quelli precedenti rimangono bloccati dal break.


    le soluzioni quindi sono due:
    1- o estendo la query di cui sopra (in un modo che non conosc) e gli chiedo, oltre a quello che c'è riportato sopra, di selezionare valori sulla stessa riga, in modo che il programma stampi solo quando ci sono commenti, utenti e voti che si trovano sulla stessa riga (hanno lo stesso id??)

    2- oppure tramite dei while annidati stampo un result.next () per ogni query, ma ho provato tutte le combinazioni e non mi viene !



    3- oppure sbaglio ad usare resultset nel senso che il result set non mi deve dare un risultato particolare, ma uno più generale dal quale poi ricavo i commenti, i nomi e i voti che mi servono

    SONO IN UN VICOLO CIECO AIUTO!!


    il codice completo l'ho postato qui
    http://forum.html.it/forum/showthread.php?threadid=2916762


    GRAZIE GRAZIE ED ANCORA GRAZIE


  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Anche dopo avere letto non ho capito. Comunque.

    Codice PHP:
    SELECT commento FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica)
    SELECT nome_ut_comm FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    SELECT voti FROM commenti WHERE 
    (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    Puoi semplificare in...

    Codice PHP:
    SELECT nome_ut_commvoticommento FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    Non capisco la clausola where. Vuoi prendere l'ultima classifica creata ?
    Ultima modifica di badaze; 15-10-2014 a 21:05
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    Messaggi
    25
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Anche dopo avere letto non ho capito. Comunque.

    Codice PHP:
    SELECT commento FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica)
    SELECT nome_ut_comm FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    SELECT voti FROM commenti WHERE 
    (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    Puoi semplificare in...

    Codice PHP:
    SELECT nome_ut_commvoticommento FROM commenti WHERE (SELECT MAX(id)FROM classifiche) = commenti.id_classifica 
    Non capisco la clausola where. Vuoi prendere l'ultima classifica creata ?
    intanto grazie mille sei gentilissimo mi stai veramente aiutando!!!

    1- ok allora facendo un solo result set poi come faresti ad inserire nell'html solo i commenti ? o solo i voti? quel resultset che hai fatto tu ti restituisce minimo 3 risultati giusto? come fai a prenderli singolarmente ed ad inserirli in 3 parti diverse dell'html?

    2- In effetti anche quello è un errore. Ho inserito quel where per fare in modo che il commento inserito fosse connesso ad un solo topic, e siccome la webapp la sto utilizzando solo io per il momento, ho voluto connettere il commento all'ultimo topic inserito, ma nel caso in cui qualcun altro facesse un altro topic nel frattempo il commento andrebbe a finire su quest'altro topic... tu come faresti per connettere un commento univocamente ad un topic? Credo che mi manchino dei tasselli per fare questa cosa anche perchè non ho mai messo online una webapp ... però se hai dei suggerimenti e spunti poi mi studio qualcosa a riguardo!grazie mille

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.