INNER JOIN无法正常工作

时间:2012-02-09 14:34:42

标签: php mysql

我有一个mysql连接问题,我正在尝试完成。 这是我的代码:

SELECT title, books.`author_id`, books.`publisher_id`, books.`format_id`, books.`genre_id`, pages, isbn, description, DATE_FORMAT(release_date, '%M, %d, %Y') 
FROM `books`
INNER JOIN `authors` ON (`authors`.`author_id`= `books`.`author_id`)
INNER JOIN `publishers` ON (`publishers`.`publisher_id`= `books`.`publisher_id`)
INNER JOIN `formats` ON (`formats`.`format_id`= `books`.`format_id`)
INNER JOIN `genres` ON (`genres`.`genre_id`= `books`.`genre_id`)`

作者,出版商,格式和流派都是单独的表,每个表都有两列。作者表中的author_id和作者,以及其他人的格式相同。

无论我做什么,加入似乎都不起作用,请帮我看看我哪里出错了。

2 个答案:

答案 0 :(得分:1)

问题出在查询的选择部分。

SELECT title, books.`author_id`, books.`publisher_id`, books.`format_id`, books.`genre_id`

您正在从books表中选择author_id,publisher_id,format_id和genre_id,而没有从连接表中选择任何内容,因此难怪您缺少所需的值。

SELECT title, books.`author_id`, authors.`author`, books.`publisher_id`, publishers.`publisher`, books.`format_id`, formats.`format`, books.`genre_id`, genres.`genre`

除了id值之外,这将生成您想要的值。

答案 1 :(得分:0)

我认为,一旦您开始使用转义列名称,您应该坚持使用它进行整个查询。使用带前缀的列名称(带表名)也一样。

第二件事是发布日期,您应该使用DATE_FORMAT(release_date, '%M, %d, %Y') AS release_date手动为其声明名称(格式化日期应该是表示层而不是模型的问题(从db获取)所以我最好用{格式化日期输出时{1}}。

无论如何,您的查询应如下所示:

date()