【问题标题】:SQL Select Using Different Parameters from the Same TableSQL 选择使用同一个表中的不同参数
【发布时间】:2014-04-03 17:19:39
【问题描述】:

概念很简单:根据某个id从table1中获取一个字段,根据table1中的不同id从table2中获取一个字段,表示最高值的记录。一个查询,两个表。

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

  1. 表格:table1(field1 和 field3)和 table2(field2)
  2. 从表 1 字段 1 和表 2 字段 2 中选择
  3. 根据table1.id获取field1
  4. 根据table1.id从table2中获取field2,其中table1.id最高 field3 中的值

须知:table2 有一个链接到表 1 的外键。我使用不同的方式使用 table1 中的信息来创建评论及其 cmets,它们基本上是相同的,包含相同类型的数据,但使用方式不同。我通过知道谁是父母(评论)和谁是孩子(评论)来将他们分开。例如,我正在尝试根据查看次数最多的评论来获取评论数据及其描述。

示例查询:

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
    )
);

我在大多数查询中得到空集结果我尝试过其他查询只是在视图字段中给我重复的数据。 我知道你们中的一些人可能会争辩说我应该为我的 cmets 制作一个不同的表,但我认为这种方式可以节省大量的数据库空间,我认为这是一个挑战。提前谢谢大家。

注意:请阅读问题 - 不完整阅读将难以理解。

根据要求:

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。

标签: php mysql sql join subquery


【解决方案1】:

好的,这在 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 作为父级的评论的描述。明白了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 2011-04-03
相关资源
最近更新 更多