【发布时间】:2014-10-27 02:35:37
【问题描述】:
我正在为一个论坛创建一个简单的数据库。我有一个类别表forum_categories,如下所示:
`cat_id` INT(8) NOT NULL AUTO_INCREMENT,
`cat_title` VARCHAR(255) NOT NULL,
`cat_desc` TEXT NOT NULL,
PRIMARY KEY (`cat_id`),
UNIQUE KEY (`cat_title`)
还有一个主题表forum_topics,如下所示:
`topic_id` INT(8) NOT NULL AUTO_INCREMENT,
`cat_id` INT(8) NOT NULL COMMENT 'foreign key with forum_categories table',
`user_id` INT(11) NOT NULL COMMENT 'foreign key with users table',
`topic_title` VARCHAR(255) NOT NULL,
`topic_desc` TEXT NOT NULL,
`topic_date` DATETIME DEFAULT NULL,
PRIMARY KEY (`topic_id`),
FOREIGN KEY (`cat_id`) REFERENCES forum_categories (`cat_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='forum topics';
现在,当我选择一个类别时,我只想显示主题,其中 cat_id 字段彼此相等。
示例:
类别 1 的 cat_id = 1
类别 2 的 cat_id = 2
主题 1 的 cat_id = 1
主题 2 的 cat_id = 2
现在选择类别1时,我只想显示主题1。如果选择 category2,我只想显示主题 2。
这个查询实现了:
SELECT *
FROM forum_categories fc
JOIN forum_topics ft ON fc.cat_id = ft.cat_id
WHERE fc.cat_id = 1
ORDER BY ft.topic_date DESC
现在,如果可能的话,我不希望每个类别都有一个查询。尝试这样做:
SELECT *
FROM forum_categories fc
JOIN forum_topics ft ON fc.cat_id = ft.cat_id
WHERE fc.cat_id = ft.cat_id
ORDER BY ft.topic_date DESC
或者这个:
SELECT *
FROM forum_categories fc
JOIN forum_topics ft ON fc.cat_id = ft.cat_id
ORDER BY ft.topic_date DESC
在两个类别中显示主题 1 和 2。有没有办法对所有类别进行一次查询?
【问题讨论】:
-
而不是在 fc.cat_id = ft.cat_id 等正确别名上使用“使用”
-
类似 SELECT * FROM forum_categories fc JOIN forum_topics ft on fc.cat_id = ft.cat_id ORDER BY ft.topic_date DESC
-
谢谢!它不起作用,但我想我在其他地方犯了一个错误!感谢您的帮助!
-
有没有办法对所有类别进行一次查询?尝试接受类别 ID 作为输入的存储过程或参数化查询
-
我认为参数化查询是您正在寻找的 OP。如果您想要更改的只是输入值,这是编写可重用查询的好方法。我的回答涵盖了这一点以及对准备好的语句的 MySQL 参考。如果您有任何问题,请告诉我。
标签: mysql sql select prepared-statement