2 Stimmen

Begrenzung einer MySQL-Abfrage auf eine gerade Anzahl von Ergebnissen

Ich habe ein bisschen PHP-Code, die ich brauche, um eine gerade Anzahl von Ergebnissen aus einer MySQL-Datenbank zurück. Ich verwende die mysqli-Erweiterung, um meine Abfrage auszuführen.

Mein Code sieht im Moment ungefähr so aus:

//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
}

Wie Sie sehen können, beschränke ich die Abfrage auf 6 Zeilen, aber unter bestimmten Bedingungen werden weniger Zeilen zurückgegeben. Wenn nur 3 Zeilen zurückgegeben werden, möchte ich die letzte Zeile wegwerfen und nur 2 behalten.

Wie kann ich dies in der MySQL-Abfrage oder in MySQLi tun?

5voto

Henrik Paul Punkte 65301

Ich würde das wahrscheinlich eher in PHP als in SQL machen. In der while -Schleife, halten Sie einen Zähler, und wenn Sie die Schleife verlassen, überprüfen Sie, ob der Zähler. Wenn er ungerade ist, verwerfen Sie die Ergebnisse der letzten Iteration.

5voto

Ross Punkte 44536

Ich stelle mir das ungefähr so vor:

// 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;
    }
}

0 Stimmen

Kannst du nicht einfach den letzten Knopf drücken? Ich habe es gerade nachgeschlagen, PHP hat eine Funktion "array_pop". Ich bin kein PHP-Programmierer, aber ich schätze, es muss auch eine Längenfunktion und einen Modulo-Operator geben.

4voto

wvanbergen Punkte 2234

Eine weitere Möglichkeit ist die Beantragung eines COUNT und ändern Sie die Abfrage entsprechend dem Ergebnis:

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

2voto

Ken Henderson Punkte 2790

Ich kenne mich mit PHP nicht aus (es ist Jahre her, dass ich mich damit beschäftigt habe), aber....

Ross erwähnt es, aber Sie wollen die

$result->num_rows

in irgendeiner Weise innerhalb Ihrer Schleife, die die Ergebnisse verarbeitet, um eine gerade Anzahl von Zeilen zu erhalten.

2voto

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

Wenn der Zähler gleich ist mit $maxResults aus der Schleife ausbrechen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X