sql >> Databasteknik >  >> RDS >> Mysql

Räknar poster som tillhör en kategori i MySQL

Lägg till en kolumn i kategorier som anger huvudkategorin som varje kategori är i (med huvudkategorier som ger sig själva). Så:

cat_id | main_cat_id | title
-------+-------------+---------
01     | 01          | Science
0101   | 01          | Medicine
02     | 02          | Sport

Välj från detta på cat_id =main_cat_id för att hitta huvudkategorier; gå tillbaka till sig själv på left.cat_id =right.main_cat_id för att hitta underordnade kategorier, sedan till inlägg på cat_id =cat_id. Gruppera efter left.cat_id och projektera över cat_id och count(*).

Jag försökte detta i PostgreSQL 8.4, och jag ser inte varför det inte skulle fungera i MySQL, eftersom frågan är ganska grundläggande. Mina bord:

create table categories(
  cat_id varchar(40) primary key,
  main_cat_id varchar(40) not null references categories,
  title varchar(40) not null
)

create table posts (
  post_id integer primary key,
  cat_id varchar(40) not null references categories,
  title varchar(40) not null
)

Min fråga (gruppering efter titel snarare än ID):

select m.title, count(*)
from categories m, categories c, posts p
where m.cat_id = c.main_cat_id
  and c.cat_id = p.cat_id
group by m.title

UPPDATERING:Jag hade också en chans att få det här att fungera med en strängoperation, som OP försökte. Frågan (i standardkompatibel SQL som accepteras av PostgreSQL, snarare än MySQL:s dialekt) är:

select m.title, count(*)
from categories m, posts p
where m.cat_id = substring(p.cat_id from 1 for 2)
group by m.title;

Vilket fungerar bra. Jag kan inte erbjuda en meningsfull jämförelse vad gäller hastighet, men frågeplanen för detta såg lite enklare ut än den för tvåvägskopplingen.



  1. Hur krymper jag min SQL Server-databas?

  2. Hur får man Mysql-databas att stödja arabiska?

  3. Fel när jag försöker ansluta play med mysql 5.5

  4. Välj värden från XML-fältet i SQL Server 2008