Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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 使用同一表中的不同参数进行SQL选择_Php_Mysql_Sql_Join_Subquery - Fatal编程技术网

Php 使用同一表中的不同参数进行SQL选择

Php 使用同一表中的不同参数进行SQL选择,php,mysql,sql,join,subquery,Php,Mysql,Sql,Join,Subquery,概念很简单:根据某个id从表1中获取一个字段,并根据表1中不同的id从表2中获取一个字段,该id表示具有最高值的记录中的最高值。一个查询,两个表 我尝试过,连接,子查询,连接和子查询,但都没有用。如果有人能够做到这一点,他们将得到我最深切的敬意,因为我已经尝试了两天了。以下是伪代码中的步骤: 表:表1(字段1和字段3)和表2(字段2) 从表1字段1和表2字段2中选择 根据table1.id获取字段1 根据表1.id从表2中获取字段2,该表具有最高的 字段3中的值 需要知道的事情:表2有一个外键链

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

我尝试过,连接,子查询,连接和子查询,但都没有用。如果有人能够做到这一点,他们将得到我最深切的敬意,因为我已经尝试了两天了。以下是伪代码中的步骤:

  • 表:表1(字段1和字段3)和表2(字段2)
  • 从表1字段1和表2字段2中选择
  • 根据table1.id获取字段1
  • 根据表1.id从表2中获取字段2,该表具有最高的 字段3中的值
  • 需要知道的事情:表2有一个外键链接到表1。我以不同的方式使用表1中的信息创建评论和评论,这些评论和评论基本上是相同的,包含相同类型的数据,但使用方式不同。我通过知道谁是父母(评论)和谁是孩子(评论)来区分他们。例如,我试图获取评论数据及其描述,这是基于哪个评论的观点最多

    示例查询:

    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'
    

    好的,这在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
    
    小提琴:

    请求的不带表名的Psuedo代码


    你文章的标题应该很好地反映问题,对我来说,这似乎是不可能的…你能稍微澄清一下吗?我想我知道你想通过你的查询得到什么-你能从表1中得到3个虚拟行吗?从表2中得到3个虚拟行,然后在最后从查询中得到什么-让我的生活变得更轻松,并且节省了编写一些你不想要的SQL的时间!请使用示例表@Graham Ritchie检查我的编辑。您没有获得基于视图最多的评论的描述。好的,我更新了代码以返回视图最多的前1名。Brandon Johnson,请完全阅读问题,这与我希望做的事情甚至一点也不接近。我非常感谢你的帮助!好的,让我看看我是否理解。您需要查看及其描述,其中包含视图最多的子级。这是正确的吗?我需要此评论的数据,比如基于此id的review1。然后,我还需要具有最多视图但也具有review1 id作为父级的评论的描述。了解了?
    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