2014-02-19 110 views
0

我不是布爾表達式的學習者,但這似乎讓我頭疼。 在我的應用程序中,當我搜索一個用戶時,我使用這個MYSQL語句從我的數據中接收到某些值。布爾邏輯語法和MYSQL語法問題

SELECT `u3`.`username`, 
         CASE WHEN `u3`.`username` IS NULL THEN 'Not Existing' 
         ELSE 'Existing' END is_following 
         FROM `userinfo` `u3` WHERE `u3`.`username` LIKE '%".mysql_real_escape_string($data)."%' OR `u3`.`email` LIKE '%".mysql_real_escape_string($data)."%' 
         UNION 
         SELECT `u2`.`username`, 
         CASE WHEN `u2`.`username` IS NULL THEN 'Follow' 
         ELSE 'Following' END is_following 
         FROM 
         `userinfo` `u1` LEFT JOIN `followers` `f` 
         ON `u1`.`username` = `f`.`source_id` 
         LEFT JOIN `userinfo` `u2` 
         ON `f`.`destination_id` = `u2`.`username` 
         AND (`u2`.`username` LIKE '%".mysql_real_escape_string($data)."%' OR `u2`.`email` LIKE '%".mysql_real_escape_string($data)."%') 
         WHERE 
         `u1`.`username` = '$name' 

現在上面的語法將返回這些值,用戶名和我自己的元數據。例如,它會返回

set of values 1: (davies and Existing)[if davies is in the userinfo table] AND (davies and Following)[if davies is following halex in the followers table]

        OR 

set of values 2: (null and Not Existing)[if davies is not in the userinfo table] AND (null and not followed)[davies does not exist]

        OR 

set of values 3: (davies and Existing)[if davies is in the userinfo table] AND (null and Not Following)[if davies is not following halex]

這些設定值我收到的,如果語句來,所以我可以篩我需要一個向我的用戶顯示這個簡單的信息 davies and Followingdavies and Follow[if davies is not following halex]User Does not Exist 現在我不確定是否應該更改我的SOL語句的結構,或者我可以通過if and else語句獲得更好的處理此邏輯的方法 這是我的if else語句的結構,但它似乎不起作用我想要的方式

if(username != null && metadata.contains("Existing"))//user exist 
{ 
    value = username; 
    //user exists but skip 
}else 
{ 
    if(username != null) 
    { 
     map = new HashMap<String, String>(); 
      map.put(TAG_USERNAME, value); 
      map.put(TAG_METADATA, metadata); 
      listvalue.add(map); 
    }else 
    { 
     //user does not exist 
     Log.i("search ", "user does not exist"); 
     } 
} 

上面的代碼屬於android。 謝謝任何​​建議表示讚賞。再次感謝提前。

+0

你在用什麼語言編寫最後的代碼示例(「if(username!= null && metadata.contains(」Existing「))// user exists ....」示例)? –

+0

@BenGribaudo languague是android –

回答

0

如果將查詢分爲兩部分,該怎麼辦?一次查詢一組信息會使事情變得更簡單,更容易調試。

我能想象這樣的東西,看起來像這樣(以僞代碼):

query = "SELECT username 
     FROM `userinfo` `u3` 
     WHERE `u3`.`username` LIKE '%".mysql_real_escape_string($data)."%' 
      OR `u3`.`email` LIKE '%".mysql_real_escape_string($data)."%'" 

var result = db.execute(query); 
// set to true if the above query returns at least one row 
bool user_exists = (result.RowCount() > 0) 
var username = (user_exists)? result.GetRow().GetField("username") : null; 

if(user_exists)//user exist 
{ 
    value = username; 
    //user exists but skip 
} // .... 

(我只複製有關您UNION的第一個SELECT語句的功能;與第二語句關聯的邏輯)