2010-07-13 4 views
1

j'ai un problème avec mon instruction SQL:comte sur la même table

Structure de la table:

CREATE TABLE "tags" (
    "id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
    "page_id" INTEGER NOT NULL, 
    "title" TEXT NOT NULL 
); 

Maintenant, je veux sélectionner toutes les balises d'une page et la fréquence de cette balise dans toute la base de données. Je l'instruction SQL suivante:

SELECT title, title as t, 
(SELECT COUNT(*) FROM tags WHERE title=t) as count 
FROM tags WHERE page_id=42 ORDER BY count DESC, title 
COLLATE NOCASE ASC; 

Mais le message d'erreur que je reçois de SQLite3 pilote en PHP:

no such column: t 

Comment dois-je écrire l'instruction SQL afin que j'obtenir le résultat je veux avoir?

Merci, Levu

Répondre

2

Essayez celui

SELECT title, 
(SELECT COUNT(*) FROM tags WHERE title=t.title) as count 
FROM tags t 
WHERE page_id=42 
ORDER BY count DESC, title 
COLLATE NOCASE ASC; 
+0

Merci, c'est :) – levu

1

voulez-vous dire comme ça ...

SELECT title, COUNT(*) as freq 
FROM tags 
WHERE page_id=42 
GROUP BY title 
ORDER BY freq DESC, title 
+0

Sry, mais cela ne fonctionne pas, je reçois toujours 1 pour freq. – levu

+0

quelles sont les données dans votre tableau ... y a-t-il plus de titres égaux avec page_id 42? – santa

0
select title, count(*) as frequency 
from tags 
where page_id = 42 
group by title 
order by count(*) desc 

Si vous voulez des balises apparaissent plus d'un

select title, count(*) as frequency 
from tags 
where page_id = 42 
group by title 
having count(*) > 1 
order by count(*) desc 
+0

Cela ne fonctionne pas, je veux avoir la fréquence des tags dans la base de données complète, et pas seulement dans le résultat ... – levu