Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这可以通过查询(MySQL)实现吗?_Php_Mysql_Sql Order By - Fatal编程技术网

Php 这可以通过查询(MySQL)实现吗?

Php 这可以通过查询(MySQL)实现吗?,php,mysql,sql-order-by,Php,Mysql,Sql Order By,PHP和MySQL 这是一个设计和表格布局较差的现有项目。。已请求添加新的“功能” 我想知道这样的查询是否可以组合在一起(不是最棒的查询) 快速总结: 制作了一张表格 表获取一个messageid和一个(空白)子id 如果有新的职位。。上述情况再次发生 (messageid和(空白)子ID) 如果对现有帖子发表“评论” 表获取一个messageid和一个子id,该子id与它要对其进行注释的“父”帖子/线程相匹配 不幸的是,这些都在同一张表中。。似乎在多表布局或其他情况下会更好 但是:

PHP和MySQL

这是一个设计和表格布局较差的现有项目。。已请求添加新的“功能”

我想知道这样的查询是否可以组合在一起(不是最棒的查询)

快速总结:

制作了一张表格

  • 表获取一个messageid和一个(空白)子id
如果有新的职位。。上述情况再次发生

  • (messageid和(空白)子ID)
如果对现有帖子发表“评论”

  • 表获取一个messageid和一个子id,该子id与它要对其进行注释的“父”帖子/线程相匹配
不幸的是,这些都在同一张表中。。似乎在多表布局或其他情况下会更好

但是:

  • 我知道父贴子(因为子ID列为空)
  • 我知道子帖子(因为子ID列的值与父帖子的注释相匹配)
  • 所有帖子都有时间戳
如何获得查询和分组/排序,如:

  • 选择-父帖子-无子ID
  • 立即将所有-儿童/评论帖子-置于此项下
并(最初?)按父发布日期排序,然后按子/评论发布日期排序(按其发布日期排序)

以下是表格设置示例:

不确定这里是否需要一个简单的分组方式?或者需要进行更高级的子选择

订单需要由母公司post“post_date”完成。。并且(以某种方式)在查询/数组返回中的“父”帖子之后获得下一个要注入的子帖子/评论帖子

以下是我想要的结果顺序:

预期结果:

'2020-03-30 09:48:50', 'Poster A', '49203-30032020094850000000', ''
'2020-03-30 09:50:50', 'Poster B', '49204-30032020095050000000', '49203-30032020094850000000'
'2020-04-03 09:55:50', 'Poster C', '49205-03042020095550000000', '49203-30032020094850000000'
'2020-03-31 09:48:50', 'Poster C', '49205-31032020094850000000', ''
'2020-04-03 09:40:50', 'Poster B', '49204-03042020094050000000', '49206-010432020094850000000'
'2020-04-01 09:48:50', 'Poster D', '49206-010432020094850000000', ''
'2020-04-02 09:49:50', 'Poster E', '49207-02042020094950000000', ''
更新: 地址:@Ngo Van Quan

谢谢他的回答

这:

(我认为这是您打算提供的内容,而不是您发布的内容??)


**什么都不做这个查询不会给你确切的信息,但是会给你每个帖子至少一行信息。如果没有注释,您将得到一行注释的一堆pfnull信息。如果有评论,则每个评论将获得一行,并重复父帖子信息:

SELECT * 
FROM testtable AS post 
LEFT JOIN testtable as `comment` ON `comment`.subid = post.messageid
WHERE post.subid = ''
ORDER BY post.postdate ASC;

以下是执行任务的sql:


select*from table order by(0时为CASE table.subid,然后为table.id*1000 ELSE table.subid*1000+table.id END),table.id

但是在对以前的父帖子发表评论之前(以及之后),可以发表另一篇“父”帖子。我根据您的示例表更正了查询。这并不完全是你想要的,但我不认为你能得到像那样交错的东西。这至少会给你一个合理的格式的信息。什么是bustrip?这不可编译。为什么会出现单独的“双引号”语法错误?不-我已经修复了它并将其发布在上面原始帖子的底部…还有testedon SQLFiddle…-不起作用Hi@whispers我理解为什么它不适用于您的情况,消息\u id和subid必须是一个整数以保证计算
SELECT * 
FROM testtable AS post 
LEFT JOIN testtable as `comment` ON `comment`.subid = post.messageid
WHERE post.subid = ''
ORDER BY post.postdate ASC;