2014-01-15 5 views
0

사용자 테이블에서 단어를 검색하고 해당 필드에있는 사용자 (사용자 이름, 이름, 성 ... 등)를 반환하는 쿼리를 만들어야합니다. . 그러나이 쿼리는 이전에 모든 사용자 중에서 찾아야하며 내 친구 인 사람 만 반환해야합니다. 표는 다음과 같습니다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'문자 만들기)하고 직접 실행하려고 시도했지만 작동하지 않습니다. 일부 레코드를 반환해야하는 경우 아무 것도 반환하지 않습니다. ...

$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; 
    "; 

잘못 무엇

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 절을 추가하십시오. 일단 모든 항목을 정렬하면 질의 끝에 order by 절을 옮깁니다. –

+0

네 말이 맞아. 아래 쿼리는 결과를 반환하지 않습니다 ... 따옴표에 문제가있을 수 있습니까? – user245679

+0

1 뒤에 잘못된 틱이 잘못되었습니다. $ username은 거꾸로 된 쉼표로 묶어야합니다. – Strawberry

답변

0

...?

+0

감사합니다. 오류는 반환하지 않지만 기록을 반환하지 않습니다 ... – user245679

+0

아마도 조건을 만족하는 기록이 없습니까? 이 시점에서 sqlfiddle은 $ sql의 반향과 함께 유용합니다. – Strawberry

관련 문제