MySQL Packete von 10 Elementen

  • SQL

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von faxe1008.

    MySQL Packete von 10 Elementen

    Hallo,

    Ich arbeite an einer Webseite die mit Parameter page aufgerufen wird. Nehmen wir mal an die Datenbank umfasst 15 Einträge.
    Dann soll mit dem Query für page=0 die neusten Einträge von 15-6 zurückgegeben werden.
    Für page=1 die Einträge von 6-1 zurückgegeben werden.

    So weit hab ich es:

    SQL-Abfrage

    1. SELECT * FROM entries WHERE ID BETWEEN X AND Y ORDER by ID DESC


    Wie berechne ich X und Y im Query?
    Y=Anzahl_aller_Spalten-9*page
    X=Y-9
    X<1 ? X=1 : X


    Wie lässt sich das statisch machen?

    8-) faxe1008 8-)
    Ahoi,

    was du suchst müsste LIMIT sein.

    SQL-Abfrage

    1. ​SELECT * FROM entries ORDER by ID DESC LIMIT 10
    Grüße Manu

    Was Gott dem Menschen erspart hat, kann der Computer.
    Billy ©, (*1932), Schweizer Aphoristiker
    Quelle: www.Aphorismen.de
    @Manü nope, das funktioniert zwar für die erste Seite, aber für die anderen will er ja nicht die ersten 10 haben.

    @faxe1008 Warum muss das Ganze in der Query berechnet werden ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Ich hab zur Verdeutlichung mal die Datenbank vereinfacht skizziert und wie das Ergebnis aussehen soll:



    LIMIT hilft mir wie gesagt leider nur bei der ersten Seite.
    EDIT: Man kann ja ein OffSet angeben :) :thumbup:

    PHP-Quellcode

    1. $mysql = 'SELECT * FROM entries ORDER by ID DESC LIMIT' . (($page+1)*10). ', 10'

    8-) faxe1008 8-)
    @3daycliff:
    Ich hätte noch ne SQL bezogene Frage:

    Ich hab eine Tabelle mit Keyvalue ID die Autoincrement hat. Wenn ich ein INSERT query verwende bekomme ich eine Fehlermeldung:
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /users/*******/www/php/SQLrequest.php on line 12

    Das Query funktioniert tadellos aber ich bekomme immer eine Fehlermeldung in den Body geschrieben -.- .
    Wie kann ich das beheben?


    PHP-Quellcode

    1. <?php
    2. function SQLrequest($query, $rows=200)
    3. {
    4. // Verbindung aufbauen, ausw�hlen einer Datenbank
    5. $conn = mysql_connect("localhost", "*****************", "****************************");
    6. mysql_select_db("**************************++");
    7. // Ausf�hren der SQL Anfrage
    8. $result = mysql_query($query);
    9. // Ergebnis als Array zur�ckgeben
    10. $anzahl_datensaetze = mysql_num_rows($result);
    11. $_SESSION['anzahl'] = $anzahl_datensaetze;
    12. if($anzahl_datensaetze) {
    13. while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    14. $ausgabe[] = $row;
    15. }
    16. } else {
    17. mysql_close($conn);
    18. return false;
    19. }
    20. mysql_close($conn);
    21. return $ausgabe;
    22. }
    23. function SQLConnect(){
    24. // Verbindung aufbauen, ausw�hlen einer Datenbank
    25. mysql_connect("localhost", "**************", "*********************");
    26. mysql_select_db("***************");
    27. }
    28. ?>


    Die Datei verwende ich per Include in der PHP-Datei der Website.

    8-) faxe1008 8-)
    In dem du alles wegschmeißt und neu schreibst!
    mysql_*-Funktionen gibt es bei PHP7 nicht mehr und sind schon seit Jahren deprecated. Stell das ganze am besten auf PDO mit Prepared Statments um... ja, macht Arbeit, willst du nicht, funktioniert doch, ist nur zum Testen... egal. Mach es einfach ;)

    Btw.: Was "fetched" du dann da? Beim INSERT bekommst du keine Datensätze zurück.
    Falls du die Anzahl der eingefügten Sätze wissen willst: Doku + affected rows
    Dann noch mal langsam:
    Du machst ein INSERT, was streng genommen keine Query ist sondern einfach nur ein Statement. Entsprechend liefert mysql_query (für dessen Gebrauch du Computerverbot bekommen solltest) keine resource, sondern einen einfachen Boolean zurück: true ("Abfrage" war okay) oder false (Fehler bei "Abfrage").
    Und mit diesem Boolean gehst du nun los, und übergibst es an mysql_num_rows (wieder Computerverbot). Die Funktion erwartet aber als Parameter keinen Boolean sondern eine resource. Peng! Fehler.

    Da deine Funktion absolut grottig ist (nicht persönlich nehmen), werde ich dir da nicht helfen, das Problem irgendwie zu umschiffen. Tu dir selbst ein gefallen und beschäftige dich etwas mit PDO und Prepared Statments. Da kannst du wunderschöne Abfragen machen und brauchst keine "Standarddatei" mit einer Eierlegenden-Wollmilchsau-Funktion...