2011-12-31 3 views
1

내 웹 사이트의 친구 시스템을 구축하려고합니다. 를 사용하여단일 변수에서 여러 값을 얻는 방법?

INSERT INTO friendship 
    VALUES 
(1, 2), 
(1, 3), 
(1, 5); 

내가 (이 예에서는, ID 1) 사용자의 모두를 얻을 수 있어요 친구의 식별자 :

CREAT TABLE users (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
    name VARCHAR(255) NOT NULL 
) Engine=InnoDB; 

CREATE TABLE friendship (
    member1 INT UNSIGNED NOT NULL, -- user's ID 
    member2 INT UNSIGNED NOT NULL, -- friend's ID 
    FOREIGN KEY (member1) REFERENCES users (id), 
    FOREIGN KEY (member2) REFERENCES users (id), 
    UNIQE (member1, member2) 
) Engine=InnoDB; 

샘플 우정 데이터 : 테이블 구조는이 같은 것을 설정 다음 :

$query = mysql_query("SELECT * FROM friendship_table WHERE member1='1'"); 
while($row = mysql_fetch_assoc($query)) { 
    $memberid = $row['member2']; 
} 

내가 지금하고 싶은 것은 친구의 이름을 얻는 것입니다. 예제에서 memberid (테이블의 member2 열) 변수의 값은 2,3 및 5입니다. if/elseif 유형의 명령문을 사용하여 구성원 ID가 무엇인지보고 싶습니다. 종류의 같은 :

if($memberid == "2") { 
    echo "Bob is your friend"; 
} elseif($memberid == "3") { 
    echo "Joe is your friend"; 
} elseif($memberid == "3" && $memberid == "2") { 

//This line is the problem, the variable has multiple values in it (2,3,5) so I think it doesn't understand that and just uses one value 

    echo "Bob and Joe are your friends!"; 
} else { 
    //... 
} 

그래서 문제는 그 변수에 할당이 개 특정 값을 가지고 있다면 검사 할 때, 그것의 모든 값을 확인하지 않는다는 것입니다. 모든 값 (2,3,5)을 검사하도록 어떻게 만들 수 있습니까?

+0

분명히 PHP의 배열 함수를 사용하여 더 좋은 방법이 일을 할 수 do.You에 방법을 explaind 그냥 코드에 대해 확실하지 않다 넓은 사용 배열을 생각 PHP 코드에서 사용자 이름을 하드 코드합니다. 더 나은 SQL 쿼리로 해결하는 것이 가장 좋은 문제입니다. 그래서 그 부분도 보여주세요. – mario

+0

@mario 내 검색어 : "SELECT * FROM friendship_table WHERE member1 = '1'" – randomphp

+0

추가 정보를 추가하려면 질문을 업데이트하십시오. 일반적으로 댓글로 답장하기보다는 게시물을 업데이트하여 명확한 요청에 응답하십시오. 한 가지 질문은 의견을 읽지 않고 이해할 수 있어야합니다. 다른 말로하면, SO는 QA 및 사이트이고 포럼이 아니며 주석은 토론을 목적으로하지 않으며 적합하지도 않습니다. – outis

답변

0

이 줄 :

$memberid == "3" && $memberid == "2" 

은 다음과 같아야합니다

switch ($memberid) { 
    case "2": // do something 
     break; 
    case "3": // do something 
     break; 
    case "5": // do something 
     break; 
    case "1": 
    case "4": 
    case "7": // do something 
     break; 
    default: // handle default case 
     break; 
} 
+0

답장을 보내 주셔서 감사하지만 그 중 하나를 작동하지 않았다. 그리고 스위치를 어떻게 사용하고 2 개의 숫자를 대입 할 수 있습니까? Like : case : "2"|| "3", <- 그럴 수 있니? – randomphp

+0

실제로 "1"인 경우 내 코드를 확인하십시오 : case "4": case "7": 본질적으로 "1"을 의미합니다. "4"|| "7" – anubhava

1

참고 $memberid : 나는이 같은 switch/case 대신 등 if/elseif /else의 사용을 고려하도록 제안

$memberid == "3" || $memberid == "2" || $memberid == "5" 

샘플 코드에서 여러 ID 보유하지 않습니다. 값은 각 루프에 겹쳐 쓰여 지므로 루프가 종료되면 마지막 값만 저장됩니다.

친구의 사용자 ID에 사용자 테이블에 우정 테이블에 가입하여 쿼리에서 친구의 이름을 가져옵니다 : 여기

SELECT name 
    FROM friendship 
    JOIN user ON friendship.friend=user.id 
    WHERE friendship.user=? 

, 나는 "로"멤버 1 "과"멤버 2 "열 이름을 변경했습니다 사용자 "및"친구 "로 표시됩니다. 우정이 대칭 관계가되도록하려면 트리거를 추가하여이를 확인하십시오. 일부 DB 확장 (예 : PDO)를 지원하지 않는

SELECT name 
    FROM friendship 
    JOIN user ON friendship.member1=user.id OR friendship.member2=user.id 
    WHERE (friendship.member1=:id OR friendship.member2=:id) 
    AND NOT user.id=:id 

참고 : 대신 현재 열 이름을 유지하려면 그것은 그래서 사용자와 친구가 하나 열에서 할 수있는 경우는 지저분하지만 가능 이름이 같은 여러 개의 매개 변수가 있으므로 실제로 반복 매개 변수로 위치 매개 변수를 사용해야합니다.

몇 가지 결과가있는 경우, 사용 PDOStatement::fetchAll (예)를 배열로 이름을 가져 :

try { 
    $friendQuery = $db->prepare('...'); 
    $friendQuery->execute(array($user->id, ...)); 
    $friends = $friendQuery->fetchAll(PDO::FETCH_COLUMN, 0); 
    switch (count($friends)) { 
    case 0: 
     // How sad. 
     $message = "You have no friends."; 
     break; 
    case 1: 
     $message = $friends[0] . ' is your friend.'; 
    default: 
     $last = array_pop($friends); 
     $message = implode(', ', $friends) . " and $last are your friends."; 
     break; 
    } 
} catch (PDOException) { 
    ... 
} 

예는 단지 예로서 의도된다 유의 아닌 전체 용액. 프로덕션 코드에서 데이터베이스 액세스를 처리하는 부분은 응용 프로그램 논리 및 출력을 처리하는 부분 (예 : switch 문)과 분리하여 보관해야합니다.

0

<?php 
#you can have array of friends like this 

$a1=array(2=>1,3=>1,5=>1,4=>1); 

#perticular user's frieds array 

$a2=array(2=>1,3=>1,5=>1); 

$final_array=array_intersect($a1,$a2)); 
if(count($final_array) > 0) 
{ 
    # each friend in $final_array are frieds Implode names here 
} 
else 
{ 
    # Not Friend 
} 
?> 

내가 원하지 않는

관련 문제