【发布时间】:2015-05-26 21:15:58
【问题描述】:
这是我的第一个问题,所以请善待:)
我有这个:
mysql> select cat_id, cat_name from phpbb_dm_eds_cat;
+--------+----------+
| cat_id | cat_name |
+--------+----------+
| 9 | catx |
| 10 | cat2 |
| 11 | test |
+--------+----------+
mysql> select subcat_id, subcat_name from phpbb_dm_eds_subcat;
+-----------+--------------+
| subcat_id | subcat_name |
+-----------+--------------+
| 39 | aaa |
| 40 | xxx111 |
| 41 | TESTXX |
| 42 | xxa |
+-----------+--------------+
这里是下载表:
mysql> select download_id, download_title, download_cat_id from phpbb_dm_eds;
+-------------+----------------+-----------------+
| download_id | download_title | download_cat_id |
+-------------+----------------+-----------------+
| 3 | s | 9 |
| 5 | raver | 41 |
| 6 | hans | 10 |
| 7 | readme | 42 |
+-------------+----------------+-----------------+
现在查询:
mysql>
SELECT bc.cat_name, bc.cat_id,
COUNT(bd.download_id) AS number_downloads,
MAX(bd.last_changed_time) AS last_download
FROM phpbb_dm_eds_cat bc
LEFT JOIN phpbb_dm_eds bd ON bd.download_cat_id = bc.cat_id
GROUP BY bc.cat_id ;
+----------+--------+------------------+---------------+
| cat_name | cat_id | number_downloads | last_download |
+----------+--------+------------------+---------------+
| catx | 9 | 1 | 1427072549 |
| cat2 | 10 | 1 | 1427125950 |
| test | 11 | 0 | NULL |
+----------+--------+------------------+---------------+
“test”类别有一个子类别,在 subcat 表中有下载,“catx”和“cat2”类别也有下载,最后一次下载显示正确,但我希望 subcat 'test 中的 last_download '也要显示
如何编写查询?
【问题讨论】:
-
您的倒数第二段难以理解。 (我已经编辑了一点。)请更清楚。请使用多个句子。您想要 every 子目录表子类别的 last_download 吗?如果是,那为什么要提到“测试”?
-
这种设计几乎行不通
-
给出你的表定义。还要解释你的桌子。您说“类别有一个子类别”,但数据库在哪里保存该信息?根据我上面的评论采取行动。
-
1.你还没有解决我所有的cmets。 2. 由于您还没有解释您希望查询返回什么,请完成以下句子:当且仅当名为
cat_name的任何一个类别的id 为cat_id,下载次数@ 时,查询结果中才会出现一行987654327@ 和上次下载last_download或名为cat_name的子类别具有 idcat_id和...? 3.阅读this。
标签: php mysql database join left-join