문제

MySQL 데이터베이스에서 짝수의 결과를 반환 해야하는 약간의 PHP 코드가 있습니다. 쿼리를 실행하기 위해 MySQLI Extension을 사용하고 있습니다.

내 코드는 현재 거의 다음과 같습니다.

//assume we already have a database connection

$query = "SELECT id 
            FROM movies 
           WHERE publish = 1
             AND showimage = 1
        ORDER BY date DESC
           LIMIT 6";

$result = $connection->query($query);

while ($row = $result->fetch_assoc()) {
    //do some stuff
}

보시다시피, 쿼리를 6 행으로 제한하지만 일부 조건에서는 더 적은 수의 반환됩니다. 3 행만 반환하면 마지막 줄을 버리고 2 만 유지하고 싶습니다.

MySQL 쿼리 또는 MySQLI에서 어떻게해야합니까?

도움이 되었습니까?

해결책

나는 다음과 같은 것을 상상할 것이다 :

// row counter
$counter = 1;
// loop through each row
while($row = $result->fetch_assoc()) {
    // If there is more than one row remaining 
    // OR if the current row can be divided by two
    if (($result->num_rows - $counter) > 1 || ($counter % 2)) {
        // result code for even rows
        $counter++;
    } else {
        // break out of the loop
        break;
    }
}

다른 팁

아마도 SQL이 아닌 PHP에서 이것을 할 것입니다. 에서 while-루프, 카운터를 유지하고 루프에서 나올 때 카운터가 있는지 확인하십시오. 이상하다면 마지막 반복의 결과를 버리십시오.

또 다른 옵션은 a COUNT 결과에 따라 쿼리를 변경하십시오.

SELECT COUNT(*) FROM movies WHERE publish = 1 AND showimage = 1

나는 PHP 사람이 아닙니다 (내가 그것을 본 지 몇 년이 지났습니다).

로스는 그것을 언급하지만 사용하고 싶습니다

$result->num_rows

루프 내에서 어떤 방식 으로든 결과를 처리하여 균일 한 수의 행을 유지합니다.

$ maxresults = $ result-> num_rows; if (($ maxresults % 2) = 1) $ maxresults-;

카운터가 $ maxresults와 동일하면 루프에서 벗어나십시오.

내 대답은 MySQL 전용이지만 아마도 최고는 아니지만 아마도 멋질 수도 있습니다. :-)

SELECT size INTO @count FROM (SELECT COUNT(*) as size FROM (SELECT * FROM table LIMIT 6) l) t;
SET @count = @count - (@count % 2);
PREPARE stmt_limit FROM 'SELECT * FROM table LIMIT ?';
EXECUTE stmt_limit USING @count;
DEALLOCATE PREPARE stmt_limit;

단계 :

  1. 첫 번째 문서에서 @Count 변수에 실제로 얼마나 많은 결과를 얻었는지
  2. 두 번째 문서에서는 변수가 고르지 않은 경우 변수를 줄입니다.
  3. 쿼리 및 자리 표시 자와 함께 제한을 준비하십시오
  4. 아기를 처형하십시오
  5. 거래를 할인, 이것이 필요한지 모르겠습니다

그러나 누가 알 수 있는지, 이것은 아마도 PHP 솔루션보다 더 빠를 것입니다 ...

가장 간단한 방법은 한 번에 두 줄을 잡는 것입니다.

while($row1 = $result->fetch_assoc() && $row2 = $result->fetch_assoc()) {
    do_something_with($row1);
    do_something_with($row2);
}

(PHP 사람이 아니라 다른 답변으로부터 구문을화물을 컬트합니다 ...)

샤키,

솔루션은 완벽하게 작동하지만 구문을 조금 수정해야합니다. 아래를 참조하십시오.

while(($row1 = $result->fetch_assoc()) && ($row2 = $result->fetch_assoc()))
{ 
    do_something_with($row1); 
    do_something_with($row2); 
} 

다른 방법은 두 번째 행이 첫 번째 행을 취소하고 첫 번째 행을 표시하지 않습니다. 이제 두 결과를 모두 표시합니다. 멋진 간단한 솔루션, BTW.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top