简体   繁体   English

结合MySQL SELECT查询和IF语句

[英]Combine MySQL SELECT queries with IF statement

I want to combine my two SELECT statements with an if statement. 我想将两个SELECT语句与一个if语句组合在一起。 Currently I am just getting the row and then doing if($row['activated'] === 1) { ... run 2nd select statement } . 目前,我只是获取行,然后执行if($row['activated'] === 1) { ... run 2nd select statement }

There has to be a better and much faster way of doing it (performance-wise). 必须有一个更好,更快的方法(性能方面)。 This is what I'm trying to do: 这就是我想要做的:

For example: (1st SELECT statement) 例如:(第一个SELECT语句)

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

If that above SELECT statement is true, then do this: (2nd SELECT statement) 如果上面的SELECT语句为true,则执行以下操作:(第二个SELECT语句)

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

How can I combine those two SELECT statements? 如何合并这两个SELECT语句? If it is else or if activated = 0, then only do the first select. 如果是else ,或者激活= 0,那么只有做的第一选择。


Bonus question: 奖励问题:

How can I make it three If statements? 如何使它成为三个 If语句? For example, the 2nd SELECT statement will be like this: 例如,第二个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();

Now if that statement is true, run this 3rd SELECT statement: 现在, 如果该语句为真,请运行以下第三个SELECT语句:

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

You can merge/combine 您可以合并/合并

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

and

SELECT * FROM friends WHERE user_id = :user_id

Into one query with a JOIN 用JOIN进入一个查询

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

Or a other JOIN format 或其他JOIN格式

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

Or you can write it as this JOIN. 或者,您可以将其编写为此JOIN。 (most likely slower) (很可能较慢)

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

The used method which is best/faster can/will be depending which indexes you have in use. 最好/更快使用的方法可以/将取决于您所使用的索引。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM