Php 更改查询以从辅助表添加结果
下面的查询运行良好。现在我想添加另一个名为addresses的表,它包含下面相同的Php 更改查询以从辅助表添加结果,php,mysql,Php,Mysql,下面的查询运行良好。现在我想添加另一个名为addresses的表,它包含下面相同的submissionid和zip变量。我想从地址中提取所有submissionid变量,其中zip='$zip',然后使用这些结果在下面的查询中从submission表中查找相应的title行 $sqlStr = "SELECT title, points, submissionid FROM submission WHERE zip = '$zip'
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
。但是如果不看一下你的数据,很难说,你能详细说明一下它是如何省略数据的吗?