사용자가 로그인하여 메시지를 게시 할 수 있도록 작은 사이트를 설정하고 있습니다. 연락처를 저장하는 테이블을 설정하는 중입니다 (사용자가 보드에서 서로 메시지를보고 보낼 수 있도록). 나는 거의 그것을 구성했지만로드 블록에 부딪쳤다.mysql에서 select 문으로 결과를 필터링하는 방법
When a user registers for the first time, an entry is created in each of two tables; users and contacts. The users table stores username and password stuff, the contacts table stores a directory of people on the system and whether they've been added to other people's contact lists. The tables look like this;
mysql> select userid, firstname, lastname, username from users;
+--------+-----------+----------+----------+
| userid | firstname | lastname | username |
+--------+-----------+----------+----------+
| 63 | Chris | Smith | csmith |
| 64 | Susan | Smith | ssmith |
| 65 | Roger | Smith | rsmith |
| 66 | Diane | Smith | dsmith |
+--------+-----------+----------+----------+
4 rows in set (0.00 sec)
mysql> select * from contacts;
+----------+---------+-----------+
| username | contact | confirmed |
+----------+---------+-----------+
| csmith | csmith | 0 |
| ssmith | ssmith | 0 |
| rsmith | rsmith | 0 |
| dsmith | dsmith | 0 |
| csmith | dsmith | 2 |
| dsmith | csmith | 2 |
| dsmith | ssmith | 1 |
| dsmith | rsmith | 1 |
+----------+---------+-----------+
8 rows in set (0.00 sec)
사용자는 인증 할 수 있으므로 문제없이 서로 추가하고 제거 할 수 있습니다. "확인 된"열은 컨택의 상태를 저장합니다. 0은 등록시 사용자에게 작성된 연락처의 초기 항목을 표시하는 데 사용됩니다. 1은 초대장이 사용자 이름에서 연락처로 전송되었지만 아직 확인되지 않았 음을 나타냅니다. 2는 접촉이 확인되었음을 나타냅니다. 사이트의 다른 부분에 대한 선택 쿼리를 수행하여 사용자의 연락처 목록을 표시하거나 추가 할 수있는 시스템의 사람들 목록 만 표시 할 수 있습니다. 초대받지 않은 연락처의 디렉토리 목록을 제외하고는 거의 모든 것이 잘 작동합니다.
연락처의 초기 목록은 확인 된 상태가 0 인 사용자에 대한 선택 쿼리의 출력으로 구성되어야하며 사용자의 항목을 생략해야합니다 (따라서 자신을 추가하지 않아야 함). (나를 괴롭히는 부분), 자신의 사용자 이름으로 1 (초대장 발송) 또는 2 (확인 된) 확인을 가진 사람도 생략해야합니다.
csmith는 ssmith 및 rsmith 사용자의 디렉토리에서 볼 수 있지만 dsmith가 이미 연락처에 추가되었으므로 dsmith가 표시되지 않아야합니다 (연락처의 5 번째 항목에서 2가 확인 됨).
그래서 이러한 규칙에 따라 디렉터리 조회에 대한 쿼리를 작성하는 데 어려움을 겪고 있습니다. 어떻게 규칙을 만들 수 있습니까?
select contact from contacts where username!=$authenticated_user and confirmation='0'
이, 내 자신을 제외하고 나에게 아직 초대되지 않은 한 사람이 시스템에있는 사용자의 목록을 제공합니다. 이미 초대 및/또는 추가 된 사용자의 목록이 더 이상 표시하지 않도록
하지만 또한 출력으로부터
select contact from contacts where username=$authenticated_user and confirmation='1' and confirmation='2'
끌어?
도움을 주시면 감사하겠습니다.
아니,이 문제가 해결되지 않습니다하지만 난 그게 바른 길에 생각합니다. 이 구문에 대해 질문이 있습니다. 내가 읽었을 때 내 인상은 "하위 쿼리 결과에 포함되지 않은 테이블에서 사용자 이름을 선택하십시오"라고 말하는 것입니다. 맞습니까? 이 서브 쿼리를 여러 개 추가 할 수 있습니까? – Kimomaru
당신은 그렇습니다.하지만 그 주제에 대해 먼저 읽으면 좋을 것입니다. 끔찍한 결과가 나올 수 있습니다. 테스트 케이스와 로직으로 판단했을 때 정확히 작동하지 않는 것이 무엇인지 정말 흥미 롭습니다. 귀하의 요구 사항을 충실히 설명해 주시겠습니까? – Xevelion
예, 물어봐 줘서 고마워요. 나는 너에게 너무 많이 부담하고 싶지 않았다. 후드에서 일어나는 일이 여기에 있습니다. 3 명의 사용자를 가정하십시오. csmith, dsmith 및 rsmith입니다.그들은 모두 사용자 테이블에 항목을 가지고 있으며 처음 등록 할 때 사용자 이름, 사용자 이름, 0 형식으로 연락처 테이블에 항목이 만들어졌습니다 (사용자 이름이 csmith이면 "csmith, csmith, 0"처럼 보입니다) .)이 항목은 – Kimomaru