Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [mysql]:subquery

  1. #1

    [mysql]:subquery

    sto cercando di fare una query tra due tabelle un po' complicata ma il risultato non è quello sperato:
    partiamo da quello che vorrei ottenere...

    io ho due tabelle:
    codice:
    post(id_post,titolo,testo,postby);
    
    reply(id_reply,post,title,text,replyby,data);
    con la chiave esterna di reply:
    codice:
    FOREIGN KEY post REFERENCES post(id_post)
    il risultato che vorrei ottenere con la query sono tutti i post ordinati secondo la data massima tra i reply che appartengono a tale post:mi spiego meglio..
    ogni post ha diversi reply(risposte) io vorrei ordinare tutti i post(senza visualizzare i reply) in base a quello che ha ricevuto la risposta più recente....

    io faccio questa query:

    Codice PHP:
    $query "SELECT id_post,titolo,testo,postby";
    $query.= "FROM post JOIN reply ON post.id_post=reply.post ";
    $query.= "WHERE thread ='$id_thread' ORDER BY reply.data DESC "
    però così mi mette in ordine i post per reply, ma ho ripetutti i post per ogni riposta che hanno ricevuto...
    quindi come potri fare?

    forse dovrei usare subquery?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  2. #2
    ho capito che la query è davvero complicata,infatti mi sto scervellando per riuscirla a creare, ma nessuno di voi ha idea di come posso farla?
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  3. #3
    allora la struttura del database per ogni post è così:

    codice:
    post______________ reply
            |
            |_________ reply
            |
            |_________ reply
            .
            .
            ._________ reply
    ora io vorrei selezionare tutti i post presenti ordinati secondo l'ultima risposta che hanno avuto in ordine dal più recente al più lontano nel tempo...

    come dovrei fare?

    ho provato così:
    Codice PHP:
    $query "SELECT id_post,titolo,testo, postby ";
    $query.= "FROM post JOIN reply ON post.id_post=reply.post ";
    $query.= "WHERE thread ='$id_thread' ORDER BY reply.data DESC "
    ma mi escono tanti post quanti sono i reply...quindi ho post ripetuti ma messi in ordine a seconda della data del reply...

    vi prego aiutatemi che sto uscendo pazzooooooooooo
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  4. #4
    [supersaibal]Originariamente inviato da Whitecrowsrain

    Codice PHP:
    $query "SELECT id_post,titolo,testo, postby ";
    $query.= "FROM post JOIN reply ON post.id_post=reply.post ";
    $query.= "WHERE thread ='$id_thread' ORDER BY reply.data DESC "
    ]
    allora mi è venuta un'idea :
    potrei fare il uscire il join ordinato il base al reply.data e mettere distinct nel select...

    come si fa ad inserire nel

    FROM post INNER JOIN reply ON post.id_post=reply.post

    la condizione ORDER BY reply.data DESC

    ?????

    se mi dite almeno solo questo riesco a risolvere il mio problema...

    ve lo chiedo perchè il manuale mysql scaricato dal sito ufficiale non è per nulla esplicativo in questo caso!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  5. #5
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Prova questa:

    SELECT MAX(reply.data),post.*
    FROM reply INNER JOIN post ON reply.post=post.id_post
    GROUP BY reply.post

  6. #6
    ho provato ma non escono in ordine!

    e con una subquery

    tipo

    codice:
    SELECT DISTINCT id_post,title,post.testo as text,postby
    FROM
            (SELECT post.*
             FROM post JOIN reply ON post.id_post=reply.post  
             WHERE thread ='$id_thread'ORDER BY reply.data DESC)
    solo che mi da errore:


    Querry get_post fallita : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( SELECT post.*FROM post JOIN reply ON post.id_post=reply.post


    come si fanno le subquery..nel manuale questa sezione è trattata malissimo
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  7. #7
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    [supersaibal]Originariamente inviato da Whitecrowsrain
    ho provato ma non escono in ordine!
    Metti ORDER BY MAX(reply.data) DESC

  8. #8
    allora io faccio questa query:

    Codice PHP:
    $query="SELECT MAX(reply.data),post.* ";
    $query.="FROM reply INNER JOIN post ON reply.post=post.id_post ";
    $query.="GROUP BY reply.post";
    $query.="ORDER BY MAX(reply.data) DESC"
    ma mi esce questo errore:

    Querry get_post fallita : Invalid use of group function
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

  9. #9
    [supersaibal]Originariamente inviato da Whitecrowsrain
    allora io faccio questa query:

    Codice PHP:
    $query="SELECT MAX(reply.data),post.* ";
    $query.="FROM reply INNER JOIN post ON reply.post=post.id_post ";
    $query.="GROUP BY reply.post";
    $query.="ORDER BY MAX(reply.data) DESC"
    ma mi esce questo errore:

    Querry get_post fallita : Invalid use of group function [/supersaibal]
    risolto bastava mettere MAX(reply.data) as dat
    e poi ORDER BY dat DESC!!!!!

    certo che sto mysql è proprio stranuccio!!!!

    grazie erano 2 girni che cercavo di risolvere questo maledetto enigma...

    grazie davvero!
    "Due cose riempiono l’animo di ammirazione e venerazione sempre nuova e crescente, quanto piú spesso e piú a lungo la riflessione si occupa di esse: il cielo stellato sopra di me, e la legge morale in me..." Immanuel Kant

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.