2016-09-23 2 views
-4

내가 3 개 DB 테이블어려운 PHP/MySQL의 코드

  1. 사용자 (사용자 ID 등)
  2. 친구 (friendid, 사용자 ID, friendsuserid)
  3. 업데이트 (을 UpdateID, 사용자 ID, 갱신)

기본적으로 프로필을 활동 (예 : 상태)으로 업데이트하고 서로 친구가 될 수있는 스크립트를 코딩했습니다 (친구 테이블, userid + friendsuserid = 친구를 사용)

그러나 이러한 업데이트를 표시하는 홈 페이지에서는 광산 (로그인 한 사용자)을 완전히 표시 할 수 있지만 친구 업데이트는 표시되지 않습니다.

많은 쿼리가 발생하여 친구 테이블에 로그인 한 사용자를 선택하고 친구 인 userid를 얻는 데 문제가 있습니다. 그 다음에 다른 선택 쿼리로 모든 상태를 선택합니다. 사용자가 id 및 friends id를 로그인했습니다. 다른 선택 쿼리를 사용하여 모든 사용자 프로필의 정보를 선택하여 상태와 함께 이름을 표시합니다.

현재로서는 쿼리를 반복하고 ID를 배열에 넣은 다음 해당 배열을 친구 업데이트에 대한 선택 쿼리에 넣고 표시하는 방법 만 생각할 수 있습니다. 더 좋은 방법이 있습니까? 코드 엉망진창과 메신저 (기본적으로 친구와 로그인 한 사용자 각각에 대한 2)는 혼란 스럽다. lol

+1

안녕하세요. 오신 것을 환영합니다. StackOverflow. 도움말 페이지, 특히 [여기에 관해서 내가 무엇에 관해 물을 수있는 주제는 무엇입니까?] (http://stackoverflow.com/help/on-topic) 섹션과 [ "어떤 유형의 질문을해야합니까? 묻지 마시오? "] (http://stackoverflow.com/help/dont-ask). 더 중요한 것은 [Stack Overflow question checklist] (http://meta.stackexchange.com/q/156810/204922)를 읽어보십시오. [Minimal, Complete, Verifiable Examples] (http://stackoverflow.com/help/mcve)에 대해 배우고 싶을 수도 있습니다. – theomessin

답변

0

나는 JOIN과 서브 쿼리를 조사해야한다고 생각한다. 당신은 "하위 쿼리를"해야 - 후 친구의 테이블에 가입 로그인 한 사용자를 선택 (친구의 아이디를 모두 얻을 수 있습니다) 다음 업데이트 테이블에 필터링이 목록을 사용

basic joins explanation

subquery info

0

이와 비슷한 방법으로 사용자의 친구 및 사용자에 대한 업데이트를받을 수 있습니다.

SELECT u.* 
FROM updates u INNER JOIN 
    (SELECT friendsuserid as userid FROM friends WHERE userid = [youruserid] 
    UNION 
    SELECT userid FROM friends WHERE friendsuserid = [youruserid] 
    )f 
ON u.userid = f.userid 
+0

그건 꿈 일뿐입니다.하지만 어떻게하면 userid 같은 친구들의 모든 사용자 프로필을 선택할 수 있습니까? 친구의 모든 업데이트를 받았으므로 링크 및 이름 등의 업데이트에 사용할 사용자 테이블에 대한 사용자 정보를 얻어야합니다. 또한 해당 쿼리를 설명 할 수 있습니까? – Mike199022

+0

사용자 테이블이있는 내부 조인 f (내부 조인 조회). –

+0

은 query를 설명하고 f는 userid의 친구 인 사용자의 userid와 userid의 친구 인 userid의 userid를 반환하는 subselect입니다. –

-1

틴 트란,

그래 내가 얻을 수가 있습니다 모든이

select u.* from statusupdates u INNER JOIN (select friendsuserid from friends where userid = '2' UNION SELECT userid from friends where userid = '2')f on u.userid = f.friendsuserid;SELECT u.userid,u.email,u.name FROM users u INNER JOIN (SELECT friendsuserid FROM friends WHERE userid = '2' UNION SELECT userid FROM friends WHERE userid = '2')f ON u.userid = f.friendsuserid; 

그러나 바로 사실이 querys입니다 생각에 내가 생각입니까? 그것은 mysql 커맨드 라인 (테스트 querys 그들은 내가 전에 코드가 필요하기 전에 내가 원하는지) 내가 원하는 모든 것을 제공합니다. 그러나 mysql은 PHP 쿼리에서 두 개의 쿼리를 받아들이지 않을 것이라고 확신합니다. 나는 그것을 해당 사용자 테이블을 추가하기 위해 내부 조인을 사용하여 시도했지만

편집이 정확하지 않는 것 : 내가 필요한 것을 얻을 수 있었다

명령 줄에서 장난 후

SELECT s.status, u.name, f.friendsuserid FROM statusupdates s JOIN 사용자 u ON s.userid = u.userid JOIN 친구들에게 u.userid = f.friendsuserid;

그러나 내 친구가 아닌 내 친구에게만 알려줍니다. 나는 퍼팅을 시도했으나 작동하지 않았다.내 자신의 업데이트를 제외하고 지금 필요한 모든 것을 가져올 수 있으며 $ _SESSION [ 'userid'] 상태와 그 친구 만 표시 할 것인가?

+0

그냥 (...) f –

+0

내 별칭 f는 모든 사용자 ID가있는 테이블처럼 반환하는 하위 쿼리입니다. 당신은 그것에 관심이 있습니다 ... 그 [youruserid] –

+0

SELECT s.status, u.name, f.friendsuserid FROM statusupdates s JOIN users u ON s.userid = u.userid JOIN (select friendsuserid from 사용자 아이디에서 friendsid WHERE userid = [youruserid] UNION 친구 userID = [youruserid] )에서 사용자 ID를 선택하십시오. ON u.userid = f.userid; –