我的问题是:
我的数据库里有一本桌子,邮报。每本书都有许多帖子
表posts有字段“Book _id”,即外键参考表图书主键(id)。
这是我的索引页。这个想法是在出版日期之前从每本书上得到最新的帖子。
当我在localhost上编码时,每件事都是正常的。我可以从每本书中得到最新的文章,并在出版日期前订购。但当我把它部署到vps中时。它没有得到最新的帖子,而是从每本书中得到第一篇文章。我对此没有任何经验。请帮忙,谢谢
在本地主机上,我使用了Apache2.2、PHP-5.3、MySQL5.5,表的引擎类型是InnoDB。
在VPS上,我使用:Nginx1.7.6,PHP-FPM5.18,MariaDB,MyIsam是表的引擎类型
我的问题是InnoDB和MyIsam,我试着解决它。但是,如果你有空的话,请给我一些好的建议。非常感谢
对不起,我的英语很差
SELECT * FROM `my_book_store`.`books`
AS `Book`
INNER JOIN
(
SELECT *
FROM posts
WHERE posts.published = 1 AND posts.published_date <= NOW()
ORDER BY posts.published_date DESC
) AS `Post`
ON (`Post`.`book_id` = `Book`.`id`)
WHERE 1 = 1
GROUP BY `Book`.`id`
ORDER BY `Post`.`published_date` desc
LIMIT 100 发布于 2014-12-05 12:34:59
试试这个:
SELECT b.*, p.*
FROM my_book_store.books AS b
INNER JOIN posts p ON b.id = p.book_id
INNER JOIN (SELECT p.book_id, MAX(p.published_date) published_date
FROM posts p
WHERE posts.published = 1 AND posts.published_date <= NOW()
GROUP BY p.book_id
) AS p1 ON p.book_id = p1.book_id AND p.published_date = p1.published_date
GROUP BY b.id
ORDER BY p.published_date DESC
LIMIT 100 发布于 2014-12-05 12:01:13
您可以尝试以下查询,这将完成从每本书中获取最后一篇文章的工作。
select
b.id,
b.name,
p.content,
p.published_date
from book b
join post p on p.book_id = b.id
left join post p1 on p1.book_id = p.book_id and p1.published_date > p.published_date
where p1.id is null;或
select
b.id,
b.name,
p.content,
p.published_date
from book b
join post p on p.book_id = b.id
where not exists(
select 1 from post p1
where p.book_id = p1.book_id
and p1.published_date > p.published_date
)演示
发布于 2014-12-05 12:17:31
问题似乎是,您只按Book.id进行分组,但选择了许多其他非聚合值,因此实际的查询结果取决于优化器提出的执行计划。另请参阅
MySQL扩展了组的使用,以便选择列表可以 请参考GROUP BY子句中未命名的非聚合列。 ..。 但是,当每个值中的所有值都在 组中未命名的非聚合列对于每个组是相同的。服务器可以自由地从每个组中选择任何值,因此,除非它们是相同的,否则所选择的值是不确定的。 此外,添加ORDER子句不会影响每个组的值选择。
https://stackoverflow.com/questions/27314820
复制相似问题