繁体   English   中英

执行时动态删除部分SQL查询

[英]Dynamically remove part of sql query upon execution

我正在执行mysql查询。 我要加入4张桌子。 我希望仅当p.location_id不等于0时才将两条粗线与查询连接在一起。我希望当p.location_id等于0时不执行它们

SELECT p. * 
FROM property p, property_type pt, location l, city c
WHERE p.status =1
AND (
pt.prop_name LIKE  '%dlf%'
OR p.furnish LIKE  '%dlf%'
OR p.description LIKE  '%dlf%'
OR p.bed LIKE  '%dlf%'
OR p.term_condition LIKE  '%dlf%'
OR p.bedroom LIKE  '%dlf%'
OR p.property_type LIKE  '%dlf%'
OR c.city_name LIKE  '%dlf%'
**OR l.loct_name LIKE  '%dlf%'**
)
AND p.prop_id = pt.prop_id
AND p.city = c.city_id
**AND p.location_id = l.loct_id**
ORDER BY sortnum

有什么办法可以做到这一点。

将查询保留在字符串中,并根据条件在执行前根据需要连接该字符串。

伪代码将是

sql = "the query";

if(condition)
{
sql.="what you want to add"
}

编辑:尝试此SELECT p。 * ......... IF(p.location_id!= 0,并且p.location_id = l.loct_id,NULL)ORDER BY sortnum编辑2:

SELECT p. * FROM property p, property_type pt, location l, city c WHERE p.status =1 AND (pt.prop_name LIKE '%dlf%' OR p.furnish LIKE '%dlf%' OR p.description LIKE '%dlf%' OR p.bed LIKE '%dlf%' OR p.term_condition LIKE '%dlf%' OR p.bedroom LIKE '%dlf%' OR p.property_type LIKE '%dlf%' OR p.property_type LIKE '%dlf%' OR c.city_name LIKE '%dlf%' OR (IF(p.location_id !=0 , l.loct_name LIKE '%dlf%',NULL))) AND p.prop_id = pt.prop_id AND p.city = c.city_id AND (IF(p.location_id != 0),p.location_id = l.loct_id,NULL) ORDER BY shortnum

SELECT p.* 
FROM property p, property_type pt, location l, city c
WHERE p.status =1
AND (
    pt.prop_name LIKE  '%dlf%'
    OR p.furnish LIKE  '%dlf%'
    OR p.description LIKE  '%dlf%'
    OR p.bed LIKE  '%dlf%'
    OR p.term_condition LIKE  '%dlf%'
    OR p.bedroom LIKE  '%dlf%'
    OR p.property_type LIKE  '%dlf%'
    OR c.city_name LIKE  '%dlf%'
    OR (p.location_id <> 0 AND l.loct_name LIKE  '%dlf%')
)
AND p.prop_id = pt.prop_id
AND p.city = c.city_id
AND (p.location_id = 0 OR p.location_id = l.loct_id)
ORDER BY sortnum

您只需要更多的逻辑条件。 代码仍然存在,但是当您想要的条件发生时,SQL不会运行它。

暂无
暂无

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

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