使用多个where子句选择多个查询

时间:2019-06-10 18:08:38

标签: php mysql performance join select

我想合并两个选择查询以提高性能。我有点困惑,因为我不确定是否可以使用 <head> <meta charset="utf-8"> <title>CKEditor</title> <script src="https://cdn.ckeditor.com/4.11.4/standard/ckeditor.js"></script> </head> <body> <textarea id="editor1"></textarea> <script> CKEDITOR.replace( 'editor1' ); </script> </body>JOIN或其他方法使其更快。

这是我要合并的两个查询:

查询1:

LEFT JOIN

然后,如果查询1中存在该行,则运行查询2:

SELECT id FROM users WHERE email = :email LIMIT 1

感谢您的任何帮助!

5 个答案:

答案 0 :(得分:1)

创建join query时,您可以指定要连接的列。在这种情况下,它将是:

select users.id, settings.*
from users
join settings on users.id = settings.id

您还可以使用一个双from子句,我认为它在相同的背景速度下看起来像:

select users.id, settings.*
from users, settings
where users.id = settings.id

如果设置了正确的索引,则连接应该快于2个选择。当然,涉及速度的因素很多,例如负载,网络,缓存的内容和不缓存的内容等等。

答案 1 :(得分:0)

根据您的描述,加入应该有效。 也许是这样的:

select u.id, s.* from users as u join settings as s on u.id = s.id where email = ?;

答案 2 :(得分:0)

由于第一个子查询将返回1行(或无):

SELECT * FROM settings 
WHERE id = (SELECT id FROM users WHERE email = :email LIMIT 1)

答案 3 :(得分:0)

Select s.* from settings s left join users u
ON u.id = s.id
Where email = :email
LIMIT 1;

这将返回“设置”表中具有该特定ID且具有相应“电子邮件”的所有列。

答案 4 :(得分:-1)

SELECT u.id 
FROM users u
WHERE email = :email 
LEFT JOIN settings s 
ON u.id = s.id
LIMIT 1

这是您的左联接查询。