0

私はmysqlクエリを実行しています。私は4つのテーブルに参加しています。p.location_id が 0 に等しくない場合にのみ、2 つの太字の行をクエリで結合したい.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

これを達成する方法はありますか。

4

2 に答える 2

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 (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 はそれを実行しません。

于 2012-10-01T08:26:59.880 に答える
0

クエリを文字列に保持し、実行前の条件に基づいて必要に応じて文字列を連結します....

擬似コードは次のようになります

sql = "the query";

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

編集:このSELECT pを試してください。*........IF(p.location_id != 0,AND 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

于 2012-10-01T07:33:06.747 に答える