Seitensystem mit seek Methode

Cury

Aktives Mitglied
Hey,
Ich weiß nicht ob es unnötig ist noch ein neues Thema zu eröffnen, falls ja tut es mir leid.

So, jetzt einmal zu meinem Problem. Ich bin dabei ein Seitensystem mit php und sql zu erstellen. Um alle Daten performant zu laden, möche ich die Seek Methode nutzen.


PHP:
$page = $_GET['page'];

//Ersten post aus der Datenbank laden
  $stmt = $mysqli->prepare("SELECT id FROM posts ORDER BY id LIMIT 1");
  $stmt->execute();

  $firstEntry = -1;

  $result = $stmt->get_result();
  if ($result->num_rows > 0) {
      while ($row = $result->fetch_assoc()) {
        $firstEntry = $row['id'];
      }
    }


  $firstEntry = (($page - 1) * 15) + $firstEntry;
  $firstEntry = $firstEntry-1;

  $stmt = $mysqli->prepare("SELECT posts.*, foren.id AS fid, foren.name AS fname, users.profilbild AS upb, users.username FROM posts
      LEFT JOIN foren ON posts.forum = foren.id
      LEFT JOIN users ON posts.von = users.username
      WHERE forum = ? AND posts.id > ? ORDER BY pinned DESC, datum DESC LIMIT 15");
  $stmt->bind_param('ii', $id, $firstEntry);
  $stmt->execute();

Ich möchte auf jeder Seite 15 Posts anzeigen lassen, die nach datum und pinned geordnet sind.
Das Problem ist jetzt aber, dass manche Posts gar nicht angezeigt werden und mache werden auf Seite 1 und 2 angezeigt...

Ich hoffe, dass mir jemand helfen kann.
MFG Cury :D
 
K

kneitzel

Gast
Also das kann doch so nicht funktionieren:
a) Hast Du immer zuerst die pinned Datensätze. Das ist also direkt ein Problem.
b) Gehst Du wieder über die id. Aber Du hast doch im anderen Thread schon erkannt, dass es in den ids auch Lücken geben dürfte. Daher ist deine Kalkulation von wegen $firstentry + (($page-1) * 15) schlicht falsch.

Und damit danke für die perfekte Demonstration, dass diese tollen Optimierungen unsinnig und fehleranfällig sind. Dir wurde doch bereits eine Abfrage genannt, die dir erlauben, gezielt einzelne Seiten aufzurufen. Dein Versuch, alles zu optimieren, führten zu diesen Fehlern da Du alles schlicht verkomplizierst und so zu schwer wartbarem Code kommst.

Edit: Das mit a) ist nicht ganz korrekt. Du bekommst die pinned Datensätze immer auf der Seite zu oberst, auf denen diese auf Grund der id sind. Du filterst ja mit > $firstEntry. Pinned mit einer id kleiner, werden natürlich nicht angezeigt ...
 

mrBrown

Super-Moderator
Mitarbeiter
Wie im anderen Thread auch schon angesprochen: seek und page-basiertes Suchen lassen sich nicht sinnvoll kombinieren

Das ist Vergleichbar mit einen Taxiservice für Familien anzubieten und dann einen Ferrari kaufen, weil der schneller fährt. Das du die Performance gar nicht brauchst und das einfach nicht zu deinen Anforderungen passt, vergisst du dabei, weil du nur "schnell" hörst :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Seitensystem mit php und js Datenbankprogrammierung 18
M Meine Datenbank lässt sich mit meiner Methode nicht ändern Datenbankprogrammierung 1
S Variable in main soll mit der generierten Zahl aus einer Methode ausgefüllt werden Datenbankprogrammierung 3
D sql query in methode mit rückgabetyp Datenbankprogrammierung 14
D JPA gleiche methode funktioniert an einer Stelle, an der anderen nicht Datenbankprogrammierung 3
D Insert Methode per Servlet Datenbankprogrammierung 2
D Insert Methode per Servlet Datenbankprogrammierung 0
J Datenbank: Methode wegen doppelten User Datenbankprogrammierung 1
N tableChanged Methode - AbstractTableModel Datenbankprogrammierung 2
W Methode createStatement() Datenbankprogrammierung 14
S Hibernate und Set-Methode Datenbankprogrammierung 16
S Schnellste Methode Datei aus Datenbank herstellen Datenbankprogrammierung 7
A update methode für datenbank Datenbankprogrammierung 2
A Insert Methode Syntaxfehler Datenbankprogrammierung 2
J Methode Datenbankprogrammierung 5
R Effiziente Java-Methode zum finden eines freien PK Datenbankprogrammierung 7
K Schnelle Methode um zu testen ob Datensatz existiert Datenbankprogrammierung 9
G Effektive Methode zum durchsuchen von SQL-Datenbanken Datenbankprogrammierung 7
A Problem mit der Methode setFieldDelimiter("'"); Datenbankprogrammierung 3
L Methode, die Veränderungen in Datenbank zeigt? Datenbankprogrammierung 4
T Methode getColumnIndex(String columnName) ? Datenbankprogrammierung 6
A Blob in Oracle-DB einfügen (veraltete Methode) Datenbankprogrammierung 3
B Methode .next() - das Rätsel für Experten! URGENT Datenbankprogrammierung 2
G SQL-Query Methode Datenbankprogrammierung 4

Ähnliche Java Themen


Oben