Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Hybrid View

  1. #1

    sql per trovare il tag piu' utilizzato

    Ciao a tutti...
    Non riesco a fare questa query

    ho due tabelle tag e tag_post.
    In tag ho appunto i tag, mentre in tag_post ho i tag assegnati ad ogni post.

    Vorrei fare una query che mi restituisca i 20 tag piu' utilizzati.
    So che devo usare un COUNT, ma perdonate la mia poca preparazione in fatto di sql!

    grazie mille!

  2. #2
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    se usi mysql è più facile, basta un order by DESC LIMIT 20

  3. #3
    mmm... mi sa che hai preso un granchio!
    order by vuole il nome colonna, mentre il LIMIT e' solo il numero recuperato.
    ORDER BY nome ASC LIMIT 20 -> recuperami 20 record in ordine alfabetico di nome.
    Ma come vedi io chiedevo altro.

    grazie lo stesso!

  4. #4
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    1) Non si sa di che database si stia parlando (il regolamento, questo sconosciuto...)
    2) Non si sa che struttura abbiano le tue tabelle...

    Immaginando che tag_post abbia due colonne (tag e post) se fai un "count(post) group by tag" ottieni quante volte un tag è stato utilizzato (nei vari post). Poi li metti in ordine e prendi i primi 20

  5. #5
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Quote Originariamente inviata da comas17 Visualizza il messaggio
    .. Poi li metti in ordine e prendi i primi 20
    sì, ma in ordine inverso (DESC)

  6. #6
    La sintassi varia un pochino a seconda del DBMS che utilizzi.

    (slq-server):

    SELECT TOP 20 tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY count(*)

    oppure (Oracle)

    SELECT tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY count(*)
    HAVING ROWNUM <= 20

    oppure (mysql)

    SELECT tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY count(*)
    LIMIT 20

    dai un occhio a questo libro se ti puo esserti utile: http://www.semplicementedatabase.altervista.org/joomla/

  7. #7
    Scusa, la troppa fretta di rispondere mi ha fatto commettere degli errori grossolani, ovviamente la group by va fatta sulla tag e mancava l'order by.

    La sintassi varia un pochino a seconda del DBMS che utilizzi.

    (slq-server):

    SELECT TOP 20 tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY tag.tag
    ORDER BY count(*) DESC

    oppure (Oracle)

    SELECT *
    FROM
    (
    SELECT tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY tag.tag
    ORDER BY count(*) DESC
    ) TAB WHERE ROWNUM <= 20

    oppure (mysql)


    SELECT tag.tag,count(*)
    FROM tag
    INNER JOIN tag_post ON tag_Post.tag=tag_post.tag
    GROUP BY tag.tag
    ORDER BY count(*) DESC

    LIMIT 20

  8. #8
    grazie mille!
    altra domanda al volo...
    se invece di COUNT(*) uso COUNT(tag_id)
    dici che risparmio in termini di risorse?

  9. #9

    count(*) o count(<campo>)

    La differenza sta "solo" nel fatto se vuoi o meno che si contino i NULL; con count(*) li conti con count(tag_id) no.
    Considerando che tag_id penso sia una chiave primaria e quindi non nulla per definizione allora non cambia proprio niente.

    se può essere utile ti consiglio una lettura di base che può essereti utile; qui il link del sito del libro NO SPAM io l'ho letto ed è stato interessante proprio per smarcare questi tipi di dubbio.
    Ultima modifica di comas17; 02-11-2013 a 22:05

  10. #10

    count(*) vs count(nome campo)

    con count(*) conti anche i NULL con count(nome campo) non conti i valori null se presenti.

    Nel tuo caso essendo il tagid presumibilmente una chiave primaria non c'è differenza dato che le chiavi primarie per definizione non possono essere nulle.

    se hai dubbi simili questo lattura NO SPAM può esserti utile.
    Ultima modifica di comas17; 02-11-2013 a 22:05

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