2014-01-21 3 views
0

약간의 도움이 필요합니다. 데이터베이스에서 로그인 한 ID가 들어있는 모든 행을 가져와야합니다. 기본적으로 데이터베이스에 "소유자"라고하는 열이 있으며 그 안에 ID가 몇 개 있습니다. "1, 6, 8"이라고 말할 수 있습니다. 사용자 ID 6이 로그인되어 있으면 해당 행을 가져와야합니다. 6 개가 없으면 "2, 5, 7"이라고 말한 다음 잡으십시오. 내 말씨는 아마도 좋지 않을 것이다. 즉PHP - 데이터베이스에서 정보 얻기 (복잡한)

-------------------------------- 
ID |Name |Other Info |Owners| 
---|--------|-----------|------| 
1 |Testing |Testing 123|1,4,6 | 
---|--------|-----------|------| 
2 |Testing1|Catz  |5,7,8 | 
---|--------|=-----------------| 
3 |Testing2|Woof  |6,9,10| 
---|--------|-----------|------| 

:.

  • 사용자 ID 6 로그에
  • 잡고 할 수있는 행을 필요 페이지로 이동합니다.
  • 스크립트는 소유자 목록에 6이 있기 때문에 행 1과 3을 가져옵니다.
  • PHP foreach는 테이블에 resutls를 보여줍니다. ( this와 관련하여 도움이 필요하지 않습니다.)

나는 이것이 내가 ownerid2, ownerid3, ownerid4 데이터베이스에 별도의 열에 공간의 부하를 복용하지 않을 것입니다 원하는 이유.

+4

구글 "데이터베이스 정규화" –

답변

3

이 작업을 시도 할 수 : ? 지적 다른, 당신은 수도 예를

SELECT * FROM table_name WHERE FIND_IN_SET(6, Owners); 

를 들어, 사용자 ID로 대체되어야한다

SELECT * FROM table_name WHERE FIND_IN_SET(?, Owners); 

또한 database normalization에 대해 읽고 싶습니다. FIND_IN_SET에 대한 문서는 다음과 같습니다.

0

이것은 아마도 내가 한 것일 수 있습니까?

SELECT * FROM table_name WHERE Owners LIKE '%6%'; 

????

편집 : 이렇게하면 68,600,6123과 같은 다른 소유자를 끌어 올 수 있습니다. 데이터베이스 정규화를 조사해야합니다.

EDIT2 : 당신의 쉼표 사이에 공백이합니다 (폭발 사용할 수있는)를이 없기 때문에

그냥이 생각; 기능과 같이 :

$ownerid = //WHATEVER THE OWNERS ID IS 
$sql = "SELECT * FROM table_name WHERE Owners LIKE '%$ownerid%'"; 
$result = mysqli_query($con, $sql); 
while($data = mysqli_fetch_array($result)){ 
    $owners = $data['Owners']; 
    $owners = explode(',',$data); 
    if(in_array($ownerid, $owners){ 
     //SHOW ROW DATA HERE 
    } 
} 
+1

그것은 더 나은 같은 될 수 있습니다. 그러나 DB 정규화는 더 깨끗한 접근법입니다. 이 문제를 해결하기 위해 열 내용을 올바르게 구문 분석하면 더 적합하지만 두 쿼리 또는 (더 복잡한) 저장된 procs 사용을 의미합니다. – Powerslave

+0

'%'사이에 문자열을 넣어 두지 않으면 65, 165, 1765934 등 65 개가있는 ID 만 반환합니다. –

+0

@Stah FIND_IN_SET은 더 잘 작동하면 MySQL이 문자열 조작을 수행합니다. –

0

이것을 수행하는 더 깨끗한 방법은 소유자 관계에 대해 별도의 테이블을 사용하는 것입니다.

Table = Owner, has ID. 
Table = Test, what you are currently trying to get 
Table = OwnerTestRel, has a foreign key to Owner and one to Test. 

그런 다음 쿼리는

Select test.* 
FROM test 
JOIN OwnerTestRel ON test.id=OwnerTestRel.testId 
WHERE OwnerTestRel.ownerId = {owner's Id} 
관련 문제