繁体   English   中英

在mysql查询中使用IF条件

[英]Using IF condition in mysql query

嗨,我正在尝试加入表,取决于另一个表的值。 在我的场景中,我希望在message.type是job的情况下加入表job ,并使用table post_ads 我写了下面的MySql查询,但它的抛出语法错误。 请帮忙。

 SELECT message.*,register.name, rg.name as to_user_name, post_ads.*
 FROM message 
 INNER JOIN register ON message.from_user_id = register.id 
 INNER JOIN register rg ON message.to_user_id = rg.id LEFT JOIN 

 CASE message.type WHEN 'job' THEN 

 SELECT 'job.title' as titles FROM job 
 WHERE (message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR 
 (message.`from_user_id` = '218' AND message.`to_user_id` = '196')

  ELSE

  SELECT 'post_ads.brand_category, post_ads.model_category, post_ads.titles, 
  post_ads.images, post_ads.ads_main_pic'  FROM post_ads  
  WHERE (message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR 
  (message.`from_user_id` = '218' AND message.`to_user_id` = '196')

  END as post_ads

首先,您滥用了案例陈述。 它应该在select语句中不在左连接中。 2,当我们使用case语句时,你不能选择多个字段。 - 要解决这个问题,您可以将CONCAT功能与用户定义的容器一起使用,并在服务器端脚本中进行操作。

您应该编写类似下面的查询,

SELECT message.*,register.name, rg.name AS to_user_name, post_ads.*,

CASE `message`.`type` WHEN 'job' THEN 

(SELECT job.title  FROM job 
WHERE (message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR 
(message.`from_user_id` = '218' AND message.`to_user_id` = '196')) 

ELSE

(SELECT  post_ads.titles FROM post_ads  
WHERE (message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR 
(message.`from_user_id` = '218' AND message.`to_user_id` = '196'))

END AS post_ads

FROM message 
INNER JOIN register ON message.from_user_id = register.id 
INNER JOIN register rg ON message.to_user_id = rg.id 

尝试这样的事情:

 $query = ("select * from `table1` where (`param`='$param' AND `$param2 `='$param2') OR `param3`='$param3"); 

修改它以适合您的查询。

编辑

再次通过你的代码,我认为你错过括号:

  SELECT message.*,register.name, rg.name as to_user_name, post_ads.* FROM message INNER JOIN register ON message.from_user_id = register.id INNER JOIN register rg ON message.to_user_id = rg.id LEFT JOIN CASE message.type WHEN 'job' THEN SELECT 'job.title' as titles FROM job WHERE ((message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR (message.`from_user_id` = '218' AND message.`to_user_id` = '196')) ELSE SELECT 'post_ads.brand_category, post_ads.model_category, post_ads.titles, post_ads.images, post_ads.ads_main_pic' FROM post_ads WHERE( (message.`from_user_id` = '196' AND message.`to_user_id` = '218') OR (message.`from_user_id` = '218' AND message.`to_user_id` = '196')) END as post_ads 

暂无
暂无

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

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