2013-08-23 8 views
0

에 따라와 MySQL의 테이블에있는 행의 수를 계산 나는 두 개의 테이블이있어 : 내용의기준이 다른 테이블

content: 
id access 
1  3 
2  5 
3  9 

viewlevels: 
id group 
1 [10,12,15] 
2 [8,12,11] 
3 [9,10,5] 

액세스 필드가 viewlevels의 id 필드와 관련됩니다.

현재 사용자 그룹에 따라 뷰 수준에서 행을 선택합니다.

$query="SELECT id FROM #__viewlevels WHERE rules LIKE '%$group%'"; 

: 그룹 = 10 인 경우, 예를 들어, 내 쿼리 행 1, 3을 선택합니다 그래서 그룹이 12 인 경우, 나는 다음과 같은 쿼리를 사용하고 등, 1 행과 2 행을 선택합니다 내 도전 테이블 위의 쿼리에서 테이블 뷰 수준에서 선택된 ID와 일치하는 테이블 내용의 열 ID에 대한 행 수를 계산하는 것입니다.

나는 다음 코드를 시도했지만 오류 반환 : 정의되지 않은 변수 : nartigos이

$query="SELECT count(id) FROM #__content WHERE access IN (SELECT id FROM #__viewlevels WHERE rules LIKE '%$group%')"; 

if ($stmt = mysqli_prepare($link, $query)) { 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 

    /* store result */ 
    mysqli_stmt_store_result($stmt); 

    $nartigos=mysqli_stmt_num_rows($stmt); 

    /* close statement */ 
    mysqli_stmt_close($stmt); 
}; 

echo "Nº de artigos " .$nartigos; 
+0

#__content이 일 테이블 이름입니다 꽤 좋은 소개입니다! 당신은 SQL을 별도로 실행하려고 했습니까? – zod

답변

1

우선, 당신은 정말 당신의 데이터를 정상화해야한다. 하나의 행에 모든 그룹을 갖는 대신 viewLevels에 대한 다 대다 (many-to-many) 조인 테이블을 고려하십시오. 즉 다음과 같습니다 쿼리를 만들 것

access_id group_id 
1   10 
1   12 
1   15 
2   8 
2   11 
2   12 
3   5 
3   9 
3   10 

는 간단한 여기

SELECT c.id AS `content_id`, COUNT(v.access_id) AS `content_count` 
FROM content AS c INNER JOIN viewLevels AS v 
    ON c.access_id = v.access_id 
WHERE v.group_id = ? 
GROUP BY c.id 

? 당신이에 대해 쿼리하는 그룹 ID입니다. 정상화없이

(다시 난 강력하게 당신이 추천하는), 당신은 여전히 ​​조인을 사용하는 것이지만, 그 결과는 다음과 같습니다

SELECT c.id AS `content_id`, COUNT(v.access_id) AS `content_count` 
FROM content AS c INNER JOIN viewLevels AS v 
    ON c.access_id = v.access_id 
WHERE v.group LIKE '%?%' 
GROUP BY c.id 
+0

안녕하세요, 두 번째 옵션을 시도했지만 여전히 같은 오류가 발생합니다 : 정의되지 않은 변수 : nartigos. 당신이 권장하는대로 데이터를 정상화하려고 노력하지만 viewlevels 테이블 (Joomla CMS)을 변경할 수 없습니다 –

+0

@ NunoNogueira 현재 코드 위치에 당신이 어디에 있는지 보여줄 수있는 오류 처리 기능이 없습니다 문제가있다. 각 데이터베이스 작업의 값을 캡처하고 검사하여 문제의 범위를 좁힐 것을 권장합니다. –

-3

당신이 당신의 테이블을 "결합"할 필요가있다.

sql 명령은 두 테이블을 별도로 쿼리하지 않습니다.

SQL에서 2 개의 테이블을 "조인"할 때 하나의 가상/임시 테이블을 공중에서 만드는 것으로 생각하면 쿼리 할 수있는 2 개의 테이블 중 하나가됩니다.

http://www.sitepoint.com/understanding-sql-joins-mysql-database/

+2

사실,이 답변은 질문에 대답하지 않습니다. 답변을 확대하거나, 참조를 포함 시키거나, 코드를 제공하십시오. – Kermit

+0

야, 진정해. 이것은 전체적인 대답입니다. 이 안내서는 조사를 위해 필요한 분야에 대한 지침을 제공하고 이에 대해 자세히 배웁니다. 나는 그들이 빠른 수정 응답을받은 것보다 장기적으로 더 유용하지 않다는 것과 마찬가지로 (그리고 그것들을 찾는다) 믿는다. 그러나 나는 당신을 위해 대답을 확장 할 것입니다. – Lan

+0

이것은 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. –