结合MySQL SELECT查询和IF语句

时间:2019-02-12 18:10:16

标签: php mysql performance join select

我想将我的两个SELECT语句与if语句组合在一起。目前,我只是进入该行,然后执行if($row['activated'] === 1) { ... run 2nd select statement }

必须有一个更好,更快的方法(性能方面)。这就是我想要做的:

例如:(第一个SELECT语句)

$db = $stmt->("SELECT * FROM users WHERE id = :id AND activated = 1");
$db->bindParam(':id', $id);
$db->execute();

如果 SELECT上方的语句为真,则执行以下操作:(第二个SELECT语句)

$db = $stmt->("SELECT * FROM user_settings WHERE user_id = :user_id");
$db->bindParam(':user_id', $id);
$db->execute();

如何合并这两个SELECT语句?如果它是else或被激活= 0,则仅进行第一个选择。


奖励问题:

如何使它成为三个 If语句?例如,第二个SELECT语句将如下所示:

$db = $stmt->("SELECT * FROM user_settings WHERE user_id = :user_id AND color = :color");
$db->bindParam(':user_id', $id);
$db->bindParam(':color', $color);
$db->execute();

现在如果该语句为真,请运行以下第三个SELECT语句:

$db = $stmt->("SELECT * FROM friends WHERE user_id = :user_id");
$db->bindParam(':user_id', $id);
$db->execute();

1 个答案:

答案 0 :(得分:0)

您可以合并/合并

SELECT * FROM user_settings WHERE user_id = :user_id AND color = :color

SELECT * FROM friends WHERE user_id = :user_id

使用JOIN进入一个查询

SELECT 
 *
FROM 
 user_settings
INNER JOIN 
 friends 
ON 
 user_settings.user_id = friends.user_id 
AND
 user_settings.color = :color

或其他JOIN格式

SELECT 
 *
FROM 
 user_settings
INNER JOIN 
 friends 
ON 
 user_settings.user_id = friends.user_id 
WHERE
 user_settings.color = :color

或者您可以将其编写为此JOIN。 (很可能较慢)

SELECT 
 *
FROM (
  SELECT 
    *
  FROM 
   user_settings 
  WHERE
   user_settings.color = :color
) AS user_settings 
INNER JOIN 
 friends
ON
 user_settings.user_id = friends.user_id

最好/更快使用的方法可以/将取决于您所使用的索引。