2011-03-25 9 views
0

나는 내 데이터베이스의 행에 저장된 아이디의를 가지고 있고, ID는 쉼표의 예로 구분됩니다누구든지이 쿼리를 도와 줄 수 있습니까?

12,3,5,2,7

와 나는를 내파하여 쿼리를 만들려고하고 있어요 문자열 및 각 ID를 다른 테이블에서 선택하지만 성능 문제로 인해 쿼리를 반복하지 않도록 노력하고있어. 어쨌든 루프 주위에 있습니까? 현재 mysqli prepared statements를 사용하고 있습니다. IDS에 저장

$stmt = $DBH->prepare("SELECT ids FROM list WHERE user = ?"); 
    $stmt->bind_param("s",$userid); 
    $stmt->execute(); 
    $stmt->bind_result($ids); 
     $stmt->fetch(); 

내가하는 태그 시스템과 유사 목록의 번호, 각각 일치하는 행을 찾고 다른 테이블을 조회 할 수 있습니다 지금 방법, 단지 숫자의 목록입니다. 숫자 또는 숫자의 양은 미리 결정되거나 알려지지 않습니다.

EXAMPLE: 

Table 1: Where the actual Information is stored 

ID Information 

1  /*information stored for id number 1*/ 
2  /*information stored for id number 2*/ 
3  /*information stored for id number 3*/ 
4  /*information stored for id number 4*/ 
5  /*information stored for id number 5*/ 



Table 2: The users name and a list of id's stored (The ID_LIST will be constantly changing and expanding, the numbers contained will not be predefined.) 

USER  ID_LIST 

exampleuser 1,3,5 
exampleuser2 1,4,12,22 

첫 번째 쿼리는 표 2의 ID 목록을 가져 와서 분리합니다. 그럼 내가 테이블 2의 ID 목록에있는 ID에서 표 1의 각 ID에서 정보를 얻을 필요가있다. 하지만 루프를 피하기 위해 노력하고있어, 잘하면 이것은 충분히 구체적으로 알려주지 않으면 알려 주시기 바랍니다.

+3

단일 데이터베이스 필드 내에 목록을 저장하는 것은 나쁜 형식입니다. 당신이 발견 한 것처럼 실제로 데이터를 얻는 것은 매우 어렵습니다. [데이터베이스 정규화를 읽어보십시오.] (http://en.wikipedia.org/wiki/Database_normalization) 스키마 디자인을 수정하면 인생이 훨씬 쉬워 질 것입니다. – Charles

+0

예제를 보여줄 수 있습니까? – Gaurav

+0

그래, 도와 줘서 고마워, 조금 더 구체적으로 편집해라. – mcbeav

답변

0
SELECT * FROM tbl WHERE FIND_IN_SET(id, '12,3,5,2,7') 

같은 그래서 당신이 FIND_IN_SET

+0

좋은 생각. 당신이 실제로 할 수있는 것처럼 보입니다. SELECT * FROM info WHERE FIND_IN_SET (id, (사용자 이름 = 'my_username')에서 사용자 ID를 선택하십시오.); ' –

+0

감사합니다. – mcbeav

1

코드의 나머지

// This doesn't need to be a prepared statement 
if ($result = $DBH->query("SELECT * FROM ids_table WHERE id IN ({$ids})")) { 
    while ($row = $result->fetch_assoc()) { 
     // Do whatever you want 
    } 
} 
1

견적의 두 번째 매개 변수로 쉼표로 구분 번호 목록이 포함 된 필드를 지정 할 수있을 것입니다 : - "ID가 데이터베이스의 행에 저장되어 있고 ID는 쉼표로 구분됩니다. 예 :"

이것은 기본적으로 나쁨입니다. 디자인!

ID가 저장되어있는 테이블의 키와 관계없이 다른 테이블의 단일 열에 ID를 저장해야합니다.

관련 문제