2014-01-15 90 views
0

我需要創建一個查詢來搜索users表中的單詞,並返回在其字段(用戶名,名字,姓氏......)中包含這樣一個單詞的用戶。 但是,此查詢應該返回,但以前在所有用戶中發現,只有那些是我的朋友。 表是這樣的:如何搜索並對結果進行排序sql

USERS

  • 用戶名
  • ...

朋友

  • user_req
  • user_acc
  • 狀態(1如果user_req和user_acc是朋友,0,如果有未處理的請求),我做了這個查詢

,但它不工作:

$sql = "SELECT u.*" 
     . "FROM (SELECT * " 
       . "FROM `users` " 
       . "WHERE (`username` LIKE '%".$value."%' OR " 
         . "`email` LIKE '%".$value."%' OR " 
         . "`first_name` LIKE '%".$value."%' OR " 
         . "`last_name` LIKE '%".$value."%'" 
     . ") ORDER BY ".$order.") u" 
     . "INNER JOIN `friend` ON (`u.username` = `friend.user_acc`)" 
     . "WHERE `friend.user_acc` = ".$username." AND `friend.status = 1`"; 

我試圖清理查詢(嘗試創建一個字符'f')並直接運行它,但它不起作用。當它返回一些記錄時什麼也不返回。

SELECT u.* 
    FROM (
     SELECT * 
     FROM `users` 
     WHERE (
      `username` LIKE '%f%' OR 
      `email` LIKE '%f%' OR 
      `first_name` LIKE '%f%' OR 
      `last_name` LIKE '%f%' OR 
      `city` LIKE '%f%' OR 
      `gender` LIKE '%f%' 
    ) ORDER BY `username`) u 
    INNER JOIN `friend` ON (u.`username` = friend.`user_acc`) 
    WHERE friend.`user_acc` = 'LP' AND friend.`status` = '1'; 

感謝

+0

關於不返回記錄,首先運行你自己的子查詢。如果它返回記錄,請加入朋友。然後添加where子句。將所有內容整理完後,將您的訂單子句移至查詢結尾。 –

+0

你說得對。下面的查詢不會返回任何結果...它可能是引號問題? – user245679

+0

1之後的反標是錯誤的。 $ username應該用引號括起來。 – Strawberry

回答

0

這有什麼錯?

$sql = " 
SELECT u.* 
    FROM users u 
    JOIN friend f 
    ON f.user_acc = u.username 
    WHERE ( username LIKE '%$value%' OR 
       email LIKE '%$value%' OR 
     first_name LIKE '%$value%' OR 
      last_name LIKE '%$value%' 
     ) 
    AND f.user_acc = '$username' 
    AND f.status = 1 
    ORDER 
    BY $order; 
    "; 

...?

+0

謝謝,不會返回錯誤,但它不會返回記錄... – user245679

+0

也許沒有符合條件的記錄?一個sqlfiddle在這一點上會很有用,用$ sql的回聲。 – Strawberry

相關問題