4

MySQL データベースに 2 つのテーブルがあります。最初のものには、部門名のリストがあります。

departments
    abbreviation | name
    -------------|-------------
    ACC          | accounting
    BUS          | business
    ...

2 番目のテーブルには、学科の略語を含む名前を持つコースのリストがあります。

courses
    section      | name
    -------------|-------------
    ACC-101-01   | Intro to Accounting
    ACC-110-01   | More accounting
    BUS-200-02   | Business etc.
    ...

departmentsテーブルの各行について、テーブル内の何行がcourses私が持っている略語に似ているかをカウントするクエリを書きたいと思います。このようなもの:

    abbreviation | num
    -------------|--------------
    ACC          | 2
    BUS          | 1
    ...

クエリを使用して、1 つの個別の部門に対してこれを行うことができます

SELECT COUNT(*) FROM courses WHERE section LIKE '%ACC%'
    (gives me 2)

PHP でループして上記のクエリを何度も実行することもできますが、1 回のクエリで実行することをお勧めします。これは私が考えている疑似コードです...

SELECT department.abbreviation, num FROM
    for each row in departments
        SELECT COUNT(*) AS num FROM classes WHERE section LIKE CONCAT('%',departments.abbreviation,'%)

何か案は?

4

4 に答える 4

0

これを試してみてください:

select
    d.abbreviation,
    count(d.abbreviation) count
from
    departments d
inner join
    courses c
on (LOCATE(d.abbreviation,c.section) <> 0)
group by d.abbreviation;
于 2013-06-20T17:17:19.077 に答える