2013-01-08 4 views
0
<?php 
     include "connect.php"; 
     // Make a MySQL Connection 
     $sql = "SELECT COUNT(*) AS comment FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
     $result = $mysqli->query($sql); 
     while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
     { 
     ?> 
     No of Comments:&nbsp;<?php echo $row['comment'];?> 
     <?php 
     } 
     ?> 

는이처럼 메아리 없습니다 : 예 : 코멘트2 대신 1 행만 검색하는 방법은 무엇입니까?

번호 : 7 코멘트 없음 : 7

도와주세요! 감사!

+0

한다 관련 없음 * : 일반 공간 대신 ​​깨지 않는 공간을 사용하는 특별한 이유가 있습니까? – h2ooooooo

+0

단일 i.items 값으로 쿼리를 제한 –

+0

co.items = i.items는 무엇입니까? 텍스트 또는 ID입니까? – Sahal

답변

4

GROUP BY을 사용했기 때문입니다. 그것은 당신이 당신의 테이블에있는 각기 다른 i.items에 대한 카운트를 얻는다는 것을 의미합니다.

당신은 쿼리 결과에 대한 항목 (I는 WHEREON로 변경) 것을 추가하여 확인할 수 있습니다

SELECT 
    i.items, 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
GROUP BY 
    i.items 

솔루션 당신이 원하는 항목을 지정하는 중입니다 ....

SELECT 
    i.items, 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
WHERE 
    i.items = 'foo' 
/* -- Grouping not needed anymore, since you only have 1 item (= 1 group) 
GROUP BY 
    i.items*/ 

... 또는 그룹화하지 않으므로 모든 항목에 대해 총계를 얻습니다.

... 또는 결과를 제한합니다. 이 쿼리는 결과 중 하나만 잘라내어 항목 중 하나만 계산합니다. ORDER BY를 추가하여 항목에 영향을 줄 수는 있지만 항목이 다소 임의적으로 선택되었습니다.

SELECT 
    COUNT(*) AS comment 
FROM 
    comment co 
    INNER JOIN item i ON co.items = i.items 
GROUP BY 
    i.items 
/* -- Optional order, if you need to influence which of the items is preffered. 
ORDER BY 
    i.items*/ 
LIMIT 1 

그래서, 당신은 질문에서 난 단지 문제가, 그리고 가장 잘 맞는 것이다 솔루션 것을 알 수 있습니다. 그러나 여기에서 선택할 수있는 몇 가지 옵션이 있습니다. :)

0

<?php 

include "connect.php"; 
     // Make a MySQL Connection 
     $sql = "SELECT COUNT(*) AS comment FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
     $result = mysql_query($sql); 

echo "No of Comments:&nbsp;". mysql_result($result, 0); 

?> 
+0

이게 뭐야 :( – Sahal

+0

이것은 대답이 아니다 .100'MINUS' marks – Sahal

+0

@Shahal 무엇을 의미 했는가? 코드를 시도 했는가? – Codesen

0

당신은 항상 다만 LIMIT 1을 던질 수보십시오; 문법을 구조화하는 방법이 아닐 수도 있지만 데이터가 무엇인지 모르는 경우 쿼리 결과를 얻을 수있는 쉬운 방법이 있습니다.


$ sql = " SELECT COUNT (*) AS 코멘트에서 주석 공동 INNER JOIN 항목 i where co.items = i.items GROUP BY i.items "; "INNER 내가 i.items BY co.items의 i.items =의 기 1 제한 항목 가입 공동 주석 FROM 주석 AS SELECT COUNT (*)"$ 의 SQL =

;

+1

다음번에 2 줄을 모두 써야한다면 LIMIT 문제가 아닙니다. GROUP BY와 INNER JOIN의 문제입니다. – Sahal

+0

Sahel에 동의하고 나는 결과에 대한 사용을 알지 못하고 데이터를 요청할 수있는 더 좋은 방법이 있다는 것을 언급했다. 이것은 참여와 관련된 문제이다. 그가 코멘트의 총 개수를 찾고 있다면, 우리는 할 수있다. 그가 항목으로 그룹화하지만 항목을 선택하지 않았거나 echo 문에서 참조 했으므로 그 문제를 해결할 필요는 없다고 가정합니다. 나는 WH를 설명하는 WH 구문을 사용하여 SQL을 래핑 할 것이라고 가정했습니다. ich 항목 그는 의견을 원했습니다. 오히려 그는 항목을 선택하고 각 행에 대해 WHILE 루프에서 항목을 반향 출력해야합니다. – user1955162

0

다른 값인 co.items 및 i.items를 확인 했습니까? 당신이 항목에 의해 그룹을하고 있기 때문에, 2 개 개의 다른 값이있는 것으로 보인다, 각각의 행은

디버깅이 시도 다른 항목의 값을 나타냅니다

$sql = "SELECT COUNT(*) AS comment, i.items AS itemTest FROM comment co INNER JOIN item i WHERE co.items= i.items GROUP BY i.items"; 
    $result = $mysqli->query($sql); 
    while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
    { 
    ?> 
    No of Comments:&nbsp;<?php echo $row['comment'];?> <?php echo $row['itemTest'];?> <br /> 
    <?php 
    } 
    ?> 

또한 당신이 가입해야하나요을 그룹? 너는 무엇을하려고 했는가? 코드가 특정 항목에 대한 페이지에가는 경우에 당신은 * 자연스럽게 쿼리, SQL 주입에 사용하기 전에 항목 식별자를 청소하기 위해 예방 조치를 취해야하지만

$sql = "SELECT COUNT(*) AS comment FROM comment co WHERE co.items= 'ITEM-IDENTIFIER-HERE' "; 
    $result = $mysqli->query($sql); 
    $row = $result->fetch_array(MYSQLI_ASSOC); 
    ?> 
    No of Comments:&nbsp;<?php echo $row['comment'];?> 

을 할 수 및 모든

관련 문제