php 参数sql,关于php:SQL从同一表中选择使用不同的参数

概念很简单:根据特定ID从table1获取一个字段,并根据与table1不同的id从table2获取一个字段,该ID代表具有最高值的最高记录。所有一个查询,两个表。

我试过,联接,子查询,联接和子查询,所有的混合都无济于事。如果有人能够做到这一点,他们将是我最深的敬意,因为我已经尝试了两天了。以下是伪代码中的步骤:

表格:table1(field1和field3)和table2(field2)

从表1字段1和表2字段2中选择

根据table1.id获取field1

根据具有最高的table1.id从table2获取field2

field3中的值

要知道的事情:table2具有链接到表1的外键。我以不同的方式使用table1中的信息来创建评论和评论,这些评论和评论基本上是同一件事,包含相同类型的数据,但使用方式有所不同。我通过知道谁是父母(评论)和谁是孩子(评论)来区分他们。我试图获取评论数据及其描述,例如,基于哪个评论的观看次数最多。

查询样例:

SELECT reviews.title, descriptions.description

FROM reviews, descriptions

WHERE reviews.id = 1

AND descriptions.review_id = (

SELECT id

FROM reviews

WHERE views = (

SELECT MAX(views)

FROM reviews

WHERE parent = 1

-- Parent is the same id used above to select the review

)

);

我在大多数查询中都得到了空集结果,而我尝试其他查询只是在视图字段中给了我重复的数据。

我知道你们中有些人可能会争辩说我应该为我的评论创建一个不同的表,但是我认为这种方式节省了大量数据库空间,因此我将其视为挑战。谢谢大家。

注意:请阅读问题-如果不完整阅读,将很难理解。

按照要求:

table: reviews

id |   title   | views |

2    'My Title'    5

1    'Other Title' 1

3    'Third Title' 3

table: description

id |     description      | review_id |

1     'Good description'       2

2     'Great description'      1

3     'Bad description'        3

结果应为:选择"良好描述",因为该描述链接到查看次数最多的评论。根据传入的内容选择标题。

title     |  description     |

'Other Title' 'Good description'

您的帖子标题应反映出问题

好吧,对我来说似乎不可能...

您能否稍作澄清-我想我知道您要通过查询判断什么-您可以从表1中进行3个虚拟行,从表2中进行3个虚拟行,然后最后从查询中获得什么期望-使工作更轻松,并且 节省了我编写一些您想要的SQL的麻烦!

使用示例表@Graham Ritchie来检查我的编辑。

好的,这在SqlServer中对MySQL尚不确定,但是可以帮助您走上正确的道路。

Select Top 1 Parent.Title, Descriptions.Description

From Reviews Parent

inner join Reviews Child

on Parent.Id = Child.Parent

inner join Descriptions

on Child.Id = Descriptions.review_id

Where Parent.Id = 1

Order By Child.[Views] desc

小提琴:http://sqlfiddle.com/#!6/89a76/1

不含表名的伪代码

Select Take the Top 1 Parent.Title, Descriptions.Description

From Table1 (The Parent)

inner join Table1 Back onto itself (The Child)

linking The parents Id to the Child's Parent

inner join Table2 onto the Child

Linking Child's Id to the Descriptions' review_id

Where the parents Id is 1 (or the Passed in value)

Order By The number of views the child had desc

您没有根据查看次数最多的评论获得描述。

好的,我更新了代码,以返回观看次数最多的前1名。

请布兰登·约翰逊(Brandon Johnson),请完整阅读这个问题,该问题甚至与我想做的事情都不遥不可及。感谢您的帮助!

好吧,让我看看我是否理解。您希望"评论"及其"描述"所在的子视图最多。那是对的吗?

我想要此评论的数据说基于此ID的review1。然后,我还希望查看的视图描述最多,但作为父级也具有review1 ID。得到它?

好的,这可能会有所帮助。您能否将"父母"添加到示例表中。这可能有助于弄清楚。

好吧,我可能已经知道了。距离您想要的东西近吗?

子级是Request表的别名。我将请求表加入了自身,因此我不得不给它起一个别名。在代码inner join Reviews Child中,Child是别名,换句话说,Child是Reviews的新临时名称。

除了标题以外,结果中其他所有内容都是错误的。我得到0个视图,并且描述也是错误的,因为它应该基于大多数视图。 @布兰登·约翰逊

好的,我将解决方案移植到小提琴上,并在答案中添加了一个链接。在我看来,它工作正常。当前它返回具有5个视图的"其他标题,良好描述"。我不确定为什么您会获得0个视图。

也许是因为我在MySQL中设置的方式?您是否知道如何在MySQL中完成此操作?

抱歉。我还没有真正使用过MySQL,也许在线上有一个转换器。

布兰登(Brandon)是您的伴郎,我不认为有人提供确切的解决方案,而是尽力而为,但您肯定已经超越了。我会投票支持您的答案,然后尝试将其转换。作为记录,您可以在不使用任何精确表的情况下在上面执行上述操作的伪代码吗?

没问题。很高兴我能提供一些帮助。我在上面添加了一些伪代码。感谢您的耐心等待。有一阵子我真的在想这可能是"不可能的查询"。

哈哈,仍然是给我的。非常感谢你的帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值