Visualizzazione risultati 1 fino 12 di 12

Discussione: [MYSQL] Query multipla su due tabelle contemporaneamente

  1. #1
    Guest

    Predefinito [MYSQL] Query multipla su due tabelle contemporaneamente

    Il mio sito è un blog.

    Ho creato una funzione di ricerca (potete vedere nella header del sito il campo di ricerca).

    La stringa inserita viene attualmente cercata fra i titoli dei vari post e nei post presenti nel database.

    Sarebbe però meglio che la cercasse anche tra i commenti ai post che sono presenti nell'archivio, e che però sono su una tabella diversa... Vi abbozzo il codice:
    Codice PHP:
    $riccio .= "testo_del_post LIKE '%$search%' ||
    nome_del_post LIKE '%
    $search%'
    "
    ;

    $queryTot="SELECT COUNT(*) FROM tabella_dei_post WHERE ".$riccio;
    Attualmente con questa query (che è funzionante..) ottengo il totale dei risultati provenienti dal campo di ricerca, da quei due campi, il testo del post e nome del post..

    dovrei teoricamente aggiungere il campo "testo_del_commento" dalla tabella "commenti"... Si può fare tutto in una unica query?
    Ultima modifica di attorianzo : 06-03-2006 alle ore 00.19.10

  2. #2
    Guest

    Predefinito

    cercando sulla documentazione ufficiale ho trovato questo:
    The FROM table_references clause indicates the table or tables from which to retrieve rows. If you name more than one table, you are performing a join. For information on join syntax, see Section 13.2.7.1, “JOIN Syntax”. For each table specified, you can optionally specify an alias.

    tbl_name [[AS] alias]
    [{USE|IGNORE|FORCE} INDEX (key_list)]
    questa è la pagina della JOIN syntax

    ti chiedo scusa se nn trovo direttamente quello di cui hai bisogno (spero di aver azzeccato cmq) ma purtroppo domani ho un'interrogazione quindi sto studiando

  3. #3
    Guest

    Predefinito

    Devi fare una cosa del genere:
    Codice PHP:
    SELECT campo1.campo2 FROM tabella1.tabella2;
    Nel tuo caso diventa:
    Codice PHP:
    $queryTot="SELECT COUNT(*) FROM tabella_dei_post.testo_del_commento WHERE ".$riccio;

  4. #4
    Guest

    Predefinito

    esatto.. ti chiedo di nuovo scusa solo per nn averti aiutato più di tanto ma come ti ripeto stavo studiando, spero tu abbia risolto!!!

  5. #5
    Guest

    Predefinito

    niente da fare.. non vuole saperne di funzionare.. Ecco quello che ho scritto:

    Codice PHP:
    $riccio = " ";
    $riccio .= "post LIKE '%$search%' ||
    nome_post LIKE '%
    $search%'
    "
    ;




    $queryTot="SELECT COUNT(*) FROM blog_posts LEFT JOIN blog_comment WHERE ".$riccio;


    $ris_totale = mysql_query($queryTot);
    $arr_totale = mysql_fetch_row($ris_totale);

    $totale = $arr_totale[0]; // numero totale dei post

    L'errore che dà è questo:
    Codice PHP:
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in m:\programmi\easyphp1-8\www2\includes\blabla.php on line 21


    Se tolgo il left join blog_comment, e lascio solo la tabella posts funziona solo sulla tabella posts regolarmente
    Ultima modifica di attorianzo : 15-03-2006 alle ore 16.48.52

  6. #6
    Ospite Guest

    Predefinito

    Prova così:

    Codice PHP:
    $riccio = " ";
    $riccio == "post LIKE '%$search%' ||
    nome_post LIKE '%
    $search%'
    "
    ;




    $queryTot="SELECT COUNT(*) FROM blog_posts LEFT JOIN blog_comment WHERE ".$riccio;


    $ris_totale = mysql_query($queryTot);
    $arr_totale = mysql_fetch_array($ris_totale);

    $totale = $arr_totale[0]; // numero totale dei post

    Ciauz!

  7. #7
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Hai sbagliato la sintassi della query, quella corretta te la scrivo qui (o meglio, dovrai specificare i parametri giusti):

    SELECT COUNT(*)
    FROM blog_posts LEFT JOIN blog_comment ON blog_posts.id = blog_comment.post
    WHERE ...

    Non avevi indicato in che modo dovevano unirsi le due tabelle, non conoscendo la struttura del tuo DB io qui ho supposto che ci fosse un ID per i post e un campo "post" nella tabella dei commenti che, per potersi riferire ad un determinato post, ha come valore l'ID del post a cui si riferisce (ci hai capito qualcosa...?)

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  8. #8
    Guest

    Predefinito

    x Probid:

    Codice PHP:
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in m:\programmi\easyphp1-8\www2\includes\blabla.php on line 21
    Niente da fare...


    x Demential Site:
    Codice PHP:
    FROM blog_posts LEFT JOIN blog_comment ON blog_posts.id = blog_comment.post
    Ho scritto così ma dà lo stesso errore:

    Codice PHP:
    $queryTot="SELECT COUNT(*) FROM blog_posts LEFT JOIN blog_comment ON blog_posts.post = blog_comment.commento WHERE ".$riccio;
    "post" è il nome della colonna contentente il post vero e proprio e si trova nella tabella "blog_posts"

    "commento" è il nome della colonna contenente il commento e si trova nella tabella "blog_comment"

    è giusto così? Perchè così non va...

    Sommariamente posso dirti che le strutture delle tabelle sono:

    tabella "blog_posts":

    numero_post (che è appunto l'ID)
    post (contiene il post)
    categoria (categoria a cui appartiene il post)
    ... (altre colonne)

    tabella "blog_comment":

    numero (è l'ID del commento, non del post)
    autore (autore del commento)
    commento (commento dell'utente al post)
    numero_post (è il numero del post a cui il commento si riferisce)
    Ultima modifica di attorianzo : 15-03-2006 alle ore 17.35.10

  9. #9
    Guest

    Predefinito

    Puoi postare la query completa?
    Non ne sono sicuro, ma mi pare che usando COUNT bisogna usare per forza GROUP BY.
    Inoltre dovresti specificare cosa contare: COUNT(blog_posts.*)
    Cmq meglio se posti l'intera query finale ;)


    Ciaoooooooo!!!!!!!

  10. #10
    Guest

    Predefinito

    Citazione Originalmente inviato da debug
    Puoi postare la query completa?
    Si Debug.. Ho scritto piu sopra la query completa è il post 5.

    Tenete presente, comunque, che questa query si riferisce ad una funzione di ricerca generica (tipo google). La ricerca deve essere effettuata in entrambe le tabelle, nel senso che quanto cercato può trovarsi nella tabella commenti e NON nella tabella post, ma anche viceversa...
    Ultima modifica di attorianzo : 15-03-2006 alle ore 17.32.21

  11. #11
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Citazione Originalmente inviato da attorianzo
    ...
    Sommariamente posso dirti che le strutture delle tabelle sono:

    tabella "blog_posts":

    numero_post (che è appunto l'ID)
    post (contiene il post)
    categoria (categoria a cui appartiene il post)
    ... (altre colonne)

    tabella "blog_comment":

    numero (è l'ID del commento, non del post)
    autore (autore del commento)
    numero_post (è il numero del post a cui il commento si riferisce)
    Era proprio quello che volevo sapere, ecco come devi fare quindi:

    SELECT COUNT(*) AS conta_post
    FROM blog_posts LEFT JOIN blog_comment ON blog_posts.numero_post = blog_comment.numero_post
    WHERE post LIKE '%$search%' OR nome_post LIKE '%$search%'

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  12. #12
    Guest

    Predefinito

    x demential_site:

    Mi ero dimenticato di una cosa importante nella struttura delle tabelle che ho postato prima: ho aggiunto che nella tabella blog_comment c'è la colonna "commento", che contiene il commento vero e proprio...

    AGGIORNAMENTO DELLA SITUAZIONE.

    Riscrivo tutto qui cerco di essere il piu chiaro possibile:

    Attualmente la query che faccio è:
    Codice PHP:

    $riccio
    = " ";
    $riccio .= "post LIKE '%$search%' ||
    nome_post LIKE '%
    $search%' ||
    commento LIKE '%
    $search%'
    "
    ;

    $queryTot="SELECT COUNT(*) AS conta_post FROM blog_posts LEFT JOIN blog_comment ON blog_posts.numero_post = blog_comment.numero_post WHERE ".$riccio;

    // query di tipo count() serve a contare tutti i post nella categoria
    $ris_totale = mysql_query($queryTot);
    $arr_totale = mysql_fetch_row($ris_totale);

    $totale = $arr_totale[0]; // numero totale dei post

    L'errore che dà è questo:
    Codice PHP:
    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in m:\programmi\easyphp1-8\www2\includes\blabla.php on line 26
    la riga 26 è per l'appunto la riga del mysql_fetch_row

    Le mie tabelle sono:

    tabella "blog_posts":

    numero_post (che è appunto l'ID progressivo dei post)
    nome_post (è il nome del post, ad esempio: "
    scampagnata da ciccio")
    post (contiene il post, esempio: "giorno 10 sono siamo andati da ciccio e ci siamo divertiti un sacco")
    categoria (categoria a cui appartiene il post, esempio "scampagnate con amici")
    ... (altre colonne, esempio: indirizzo Ip, data, email ecc.ecc..)

    tabella "blog_comment":

    numero (è l'ID del commento, non del post!)
    autore (autore del commento, esempio "caio")
    commento (commento dell'utente al post. Esempio "da ciccio è proprio vero, ci siamo divertiti")
    numero_post (è il numero del post a cui il commento si riferisce)
    ... (altre colonne, esempio: indirizzo Ip, data, email ecc.ecc..)
    Ultima modifica di attorianzo : 15-03-2006 alle ore 18.09.42

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •