2011-03-09 5 views
1

현재 사용자 데이터베이스 열에 숫자 문자열을 저장하고있는 프로젝트에서 작업 중입니다.PHP, MySQL Query

나는 쿼리를 수행하고 열이 숫자 X를 포함하는 모든 사용자를 찾을 필요가

예 :

Usesrs 타베 :

ID | NAME | CONNECTIONS 
01 | Quinton | 4,44,73,91 

나는 사용자를 볼 필요가 어떤 사용자가 연결되어 있는지 확인하십시오 # 44. 전체 테이블을 움켜 잡은 다음 각 사용자 연결 값을 살펴 보는 대신 효율적으로이 작업을 수행 할 수 있습니까?

나는 IN() 기능과 정반대의 방법이 있다는 것을 알고 있습니다.

+7

나는 ... 예, 아닙니다. "정상화"에 대해 읽어야합니다. –

+0

다음 링크는 권장 사항입니다. [정규화시 읽기] (http://en.wikipedia.org/wiki/Database_normalization). – Charles

+0

오른쪽 - 디자인 수정, 구멍을 더 깊이 파지 마십시오. – dkretz

답변

2
select 
    * 
from 
    `users` 
where 
    concat(',', `CONNECTIONS`, ',') like concat('%,', @X, ',%') 
+0

+1 화려한! 쉼표 앞뒤에 '%'한정자가 누락되었습니다. – Cameron

+0

현란하고 무서운. 전체 테이블 스캔이 필요합니다. – Charles

+0

감사! 불만이 잠시 후에 이걸 말해 줘. 이 작업을 수행하는 것이 더 빠르지 않습니까, 아니면 각 연결을 항목으로 새 테이블을 만드시겠습니까? –

7

가능한 경우 문자열 검색을 문제가되지 않도록 스키마를 정상화하는 것이 좋습니다.

CREATE TABLE Users 
(
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    Name VARCHAR(100) 
) 

CREATE TABLE UserConnections 
(
    UserId INT NOT NULL REFERENCES Users (UserId), 
    Connection INT NOT NULL 
) 

또한 UserConnections의 연결 열을 인덱싱합니다. 그런 다음 연결 열을 검색하십시오. 훨씬 더 빠를 것입니다.