2016-08-26 3 views
0

testuser_test이라는 데이터베이스에 사용자 그룹과 사용자 테이블을 만들었습니다. 모든 사용자는 적어도 하나의 숫자를 포함하지만 1,2,3과 같이 여러 개의 숫자를 포함 할 수있는 groups이라는 필드를 가지고 있습니다. 사용자 그룹 테이블은 idgroup_name입니다.PHP - 숫자/쉼표로 여러 행 검색

내가 지금까지 해왔 던 것은이 사용자가 할당 된 모든 그룹의 데이터를 가져 오는 것입니다. 예를 들어, 한 사용자가 그룹 1,2,3 (데이터베이스에 표시된대로)에 할당 된 경우 해당 사용자는 해당 ID로 각 그룹의 이름을 인쇄합니다. 그래서 아마 group 1group 2group 3을 인쇄 할 것입니다.

$user_test = $this->mysqli->query("SELECT user_id,groups FROM user_test WHERE user_id = '1'"); 
while($user_test_fetch = $user_test->fetch_array()) { 
    $groups = $user_test_fetch["groups"]; 
} 

if(strlen($groups) > 1) { // user has more than 1 group 
    // ??? 
} else { // user does not have more than 1 group 
    $search = "id = '".$groups . "'"; 
} 

$group_data = $this->mysqli->query("SELECT * FROM test WHERE ".$search.""); 
while($group_data_fetch = $group_data->fetch_array()) { 
    echo $group_data_fetch["group_name"]; 
} 

또는이 작업을 수행하는 다른 방법이 있으면 언제든지 알려주세요. 나는이 작업을 수행하는 방법을 간단하게 배우려고 노력하고 있습니다 (가능한 한 효율적으로 수행하는 것이 바람직 함).

+0

데이터베이스 스키마를 수정할 수 있습니까? 하나의 열에 여러 값을 저장하면 거의 항상 두통이 발생합니다. – Chris

+0

@Chris 아니, 죄송합니다. 이 방법으로이 작업을 수행하는 방법을 알고 싶습니다. –

+1

스키마를 표준화하십시오. 자신을 고통의 세계로 지켜라. – Strawberry

답변

1

아주 간단합니다.
1,2,3 형식으로 저장되어있는 경우. 그리고 1 및 ID라고 하나 하나를 가정하는 것은 INT 또는 BIGINT입니다

if(strlen($groups) > 1) { // user has more than 1 group 
// ??? 
} else { // user does not have more than 1 group 
$search = "id = '".$groups . "'"; 
} 

$search = "id IN (".$groups."); 

이 하나에게로

변경 (그것이 VARCHAR 경우, 그렇지 않으면이 쿼리는 느려집니다) 줄은 쉼표로 구분되는 한 단일 그룹 또는 그룹 집합과 함께 작동합니다 (SQL에서 쉼표를 사용하기 때문에)

+0

매일 새로운 것을 배웁니다! 답변 해주셔서 감사합니다. 나는 SQL 내 지식이 충분히 크지 않았다고 생각합니다! 나는 이것을 몇 분 안에 정답으로 표시 할 것이다 :) –