首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用mysql和mariadb时的不同结果查询

使用mysql和mariadb时的不同结果查询
EN

Stack Overflow用户
提问于 2014-12-05 11:23:25
回答 3查看 906关注 0票数 1

我的问题是:

我的数据库里有一本桌子,邮报。每本书都有许多帖子

表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,我试着解决它。但是,如果你有空的话,请给我一些好的建议。非常感谢

对不起,我的英语很差

代码语言:javascript
复制
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   
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-05 12:34:59

试试这个:

代码语言:javascript
复制
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   
票数 1
EN

Stack Overflow用户

发布于 2014-12-05 12:01:13

您可以尝试以下查询,这将完成从每本书中获取最后一篇文章的工作。

代码语言:javascript
复制
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;

代码语言:javascript
复制
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
)

演示

票数 2
EN

Stack Overflow用户

发布于 2014-12-05 12:17:31

问题似乎是,您只按Book.id进行分组,但选择了许多其他非聚合值,因此实际的查询结果取决于优化器提出的执行计划。另请参阅

MySQL扩展了组的使用,以便选择列表可以 请参考GROUP BY子句中未命名的非聚合列。 ..。 但是,当每个值中的所有值都在 组中未命名的非聚合列对于每个组是相同的。服务器可以自由地从每个组中选择任何值,因此,除非它们是相同的,否则所选择的值是不确定的。 此外,添加ORDER子句不会影响每个组的值选择。

使用mysql和mariadb时的不同结果查询

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27314820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档