Php 更改查询以从辅助表添加结果

Php 更改查询以从辅助表添加结果,php,mysql,Php,Mysql,下面的查询运行良好。现在我想添加另一个名为addresses的表,它包含下面相同的submissionid和zip变量。我想从地址中提取所有submissionid变量,其中zip='$zip',然后使用这些结果在下面的查询中从submission表中查找相应的title行 $sqlStr = "SELECT title, points, submissionid FROM submission WHERE zip = '$zip'

下面的查询运行良好。现在我想添加另一个名为addresses的表,它包含下面相同的
submissionid
zip
变量。我想从地址中提取所有
submissionid
变量,其中
zip='$zip'
,然后使用这些结果在下面的查询中从submission表中查找相应的
title

$sqlStr = "SELECT title, points, submissionid
             FROM submission 
            WHERE zip = '$zip'
         ORDER BY points DESC, title ASC              
     LIMIT $offset, $rowsperpage";

您可以使用子查询来实现这一点

$sqlStr = "SELECT title, points, submissionid
         FROM submission 
        WHERE submissionid IN(
              SELECT submissionid 
              FROM addreses
              WHERE zip = '$zip')
     ORDER BY points DESC, title ASC              
 LIMIT $offset, $rowsperpage";
参考:

还是加入

$sqlStr = "SELECT s.title, s.points, s.submissionid
         FROM submission s 
         INNER JOIN addresses ad
         on ad.submissionid = s.submissionid
         WHERE ad.zip = '$zip'
     ORDER BY s.points DESC, s.title ASC              
 LIMIT $offset, $rowsperpage";
参考:

正如注释中提到的@AdrianCornish,内部连接比子查询快。因此,您最好使用JOIN选择第二个选项


因此,您可以使用子查询来实现这一点

$sqlStr = "SELECT title, points, submissionid
         FROM submission 
        WHERE submissionid IN(
              SELECT submissionid 
              FROM addreses
              WHERE zip = '$zip')
     ORDER BY points DESC, title ASC              
 LIMIT $offset, $rowsperpage";
参考:

还是加入

$sqlStr = "SELECT s.title, s.points, s.submissionid
         FROM submission s 
         INNER JOIN addresses ad
         on ad.submissionid = s.submissionid
         WHERE ad.zip = '$zip'
     ORDER BY s.points DESC, s.title ASC              
 LIMIT $offset, $rowsperpage";
参考:

正如注释中提到的@AdrianCornish,内部连接比子查询快。因此,您最好使用JOIN选择第二个选项


根据我使用mysql的经验,SO

内部连接上的相关线程通常会得到更好的优化。例如,我昨天写了一个非常相似的查询,WHERE/IN为36秒,tmp的内部连接为0.06秒table@Joy我认为这是可行的,但它实际上忽略了submission@John根据需要,您可能需要不同的联接,如
left
right
。但是如果不看一下你的数据就很难说了,你能详细说明一下它是如何省略数据的吗?根据我使用mysql的经验,内部连接通常会得到更好的优化。例如,我昨天写了一个非常相似的查询,WHERE/IN为36秒,tmp的内部连接为0.06秒table@Joy我认为这是可行的,但它实际上忽略了submission@John根据需要,您可能需要不同的联接,如
left
right
。但是如果不看一下你的数据,很难说,你能详细说明一下它是如何省略数据的吗?