PHP Schwere PHP-Frage. Problem bei Select abfrage.

T

tender89

Gast
Hallo zusammen.

Ich bau grad eine Android App die mit einer Datenbank kommuniziert und muss eine Select abfrage bauen
auf die ich einfach nicht komme.

Ich hab zb folgende Datenbank:

__ID-TEXT__________TEXT__________ID-KATEGORIE
___85_____________text______________11_____
___84_____________text______________11_____
___83_____________text______________11_____
___82_____________text______________11_____
___81_____________text______________11_____
___80_____________text______________11_____<------START-ID
___79_____________text______________11_____
___78_____________text______________11_____
___77_____________text______________11_____
___76_____________text______________11_____
___75_____________text______________11_____
___74_____________text______________11_____
___73_____________text______________11_____
___72_____________text______________11_____
___71_____________text______________11_____
___70_____________text______________11_____
___69_____________text______________11_____
___68_____________text______________11_____
___67_____________text______________11_____
___66_____________text______________11_____
___65_____________text______________11_____
___64_____________text______________11_____
___63_____________text______________11_____
___62_____________text______________11_____
___61_____________text______________11_____
___60_____________text______________11_____
___59_____________text______________11_____
___58_____________text______________11_____
___57_____________text______________11_____
___56_____________text______________11_____
___55_____________text______________11_____
___54_____________text______________11_____

So der Benutzer kommt nun auf die APP und bekommt beim Start die ID 80 als aktuellste ID auf sein Handy übertragen.
Diese ID wird nun auf dem Lokalem HTML5 Storage-System abgespeichert.
Nun werden 10 Einträge auf seinem Handy angezeigt. Sprich von 80-71.
Der Benutzer klickt auf Weiter und wird zu den nächsten einträgen weitergeleitet. Also 70-61.
PHP:
$sachen_anzeigen="SELECT ID-TEXT,TEXT, FROM tabelle WHERE ID-KATEGORIE > 10 AND ID-TEXT < 71 ORDER BY ID-TEXT DESC Limit 0,10";

So nun werden 10 weitere Einträge angezeigt. Sprich 70-61. Das würde so ausehen:

text 70,text 69,text 68,text 67,text 66,text 65,text 64,text 63,text 62,text 61.

So nun klickt der Benutzer wieder auf weiter und und kommt zu Eintrag 60-51.

In der Zwischenzeit kommen 5 neue Einträge in die Datenbank. Und die Maximal ID der Tabelle wird auf 85 erhöht.
Dadurch wird ein Button angezeigt (Aktualisieren) der es einem erlaubt die Aktuellsten Einträge anzuzeigen Sprich 85-76.

Zusätzlich wird ein zurück Button angezeigt (wir sind bei Eintrag 60-51).
Wenn man jetzt diesen zurück Button klickt sollen die Letzten 10 Einträge angezeigt werden. Jedoch NUR bis ID-TEXT 80.
Weil ja die 5 anderen Einträge Neu sind. Weil das Handy hat mit ID 80 gestartet und die 5 Einträge sind neu und werden Nur angezeigt falls wir auf den Button Aktualisieren klicken.

Wie schaff ich es nun von ID 60 die letzten 10 Einträge anzuzeigen weil wir wollen ja zurück.
Ich hab es so ausprobiert:
PHP:
$sachen_anzeigen="SELECT ID-TEXT,TEXT, FROM tabelle WHERE ID-KATEGORIE > 10 AND ID-TEXT > 60 ORDER BY ID-TEXT DESC Limit 0,10";
Jedoch ist das Falsch. Zusätzlich muss ich noch beachten das der zurück button nur bis ID 80 funktioniert.

So sollte die Select abfrage auf Deutsch lauten:

Select 10 einträge aus tabelle, wo ID-KATEGORIE > 10, und ID-TEXT > 60 absteigend sortiert , jedoch nur bis Eintrag 80 .

Als Ergebnis sollte dann das rauskommen :

text 70,text 69,text 68,text 67,text 66,text 65,text 64,text 63,text 62,text 61.

NACHTRAG :

Ich glaub das ich das falsch Formuliert hab. Also Handy ist bei ID 60-51. So nun will ich zurück auf 70-61.
Und ID 80 ist die Gränze Weil 81-85 sind neu dazugekommen als wir auf weiter geklickt haben.
Die Gränze 80 brauch ich zusätzlich weil ja währenddessen der Admin vllt Eintrag 66 löscht weil es Spam war oder so



Kann mir einer helfen??

Würde mich SEHR freuen. MFG
 
Zuletzt bearbeitet:
Die Begrenzung auf X Einträge machst du mit LIMIT(), welchem du auch ein Offset mitgeben kannst.
 
hey Daaron danke für deine schnelle Antwort. Könntest du mir vllt den PHP code dazu schreiben? Also in dem Format wie Oben.
Ich probier schon seit Stunden rum und bekomme gleich einen "VOGEL"....
Ergänzung ()

Ich glaub das ich das falsch Formuliert hab. Also Handy ist bei ID 60-51. So nun will ich zurück auf 70-61.
Und ID 80 ist die Gränze Weil 81-85 sind neu dazugekommen als wir auf weiter geklickt haben.
Die Gränze 80 brauch ich zusätzlich weil ja währenddessen der Admin vllt Eintrag 66 löscht weil es Spam war oder so
 
Zuletzt bearbeitet:
Ich glaube du stellst dir das alles viel zu kompliziert vor oder erklärst es einfach nicht richtig. Für mich hört sich das nach einem einfachen News-System an. Dort limitierst du alles nur per LIMIT <von>, <Anzahl>. Die IDs von den News sind dabei vollkommen irrelevant.
 
Jop ich glaub ich denke einfach viel zu kompliziert.... :/ Jop es ist ein einfaches News System. Könntest du mir vllt
eine Beispiel Select abfrage bauen für den zurück Button für das obige Beispiel?
 
Code:
<?php

$page = (int)$_GET['page'];
$anzahl = 10;
$start = ($page - 1) * $anzahl;

$q = <<<SQL
SELECT *
FROM tabelle
ORDER BY id DESC
LIMIT $start, $anzahl
SQL;
$page = 1 -> LIMIT 0, 10 = aktuellste News, 10 an der Zahl
$page = 2 -> LIMIT 10, 10 = 10. News, 10 an der Zahl
$page = 3 -> LIMIT 20, 10 = 20. News, 10 an der Zahl
usw.
 
Zuletzt bearbeitet:
Google doch einfach mal nach "php mysql blätterfunktion" gibt es tausende Tutorials zu - ich glaub durch deine falsche Vorstellung des ganzen hast du aus den Augen verloren was es eigentlich ist. Ne stinknormale Blätterfunktion bei der du dir nur mit PHP die entsprechenden Limits und aktuelle Seite berechnen musst.
Wie gesagt - einfach mal bei google eingeben :)
 
Warum machst du dir überhaupt so einen Stress? Bau das ganze doch "klassisch" mit einer Pagination und ermittle aus der angefragten Seitenzahl, welche IDs du sehen willst.
 
Ich hab jetzt schon so viel ausprobiert das ich glaub TOTAL durcheinander gekommen bin. So ich vergesse das jetzt alles am besten und google eine
blätterfunktion. Danke an euch alle =)

Nachtrag:

Wieso ich so kompliziert gedacht habe hat folgenden Grund:

Also sagen wir der Benutzer ist auf der Seite 6. Zu dem Zeitpunkt befinden sich 600 Einträge
in der Datenbank. Nun schließt der Benutzer die App und öffnet sie aber erst 4 Tage Später.

Auf dem Handy hab ich jetzt abgespeichert das zu dem Zeitpunkt sich 600 Einträge befanden
und der Benutzer bei Eintrag 400 war.

Nun kommen nach 4 Tagen 100 Einträge dazu.
Der Benutzer startet die App .
Nun Sendet das Handy die Max ID 600 (stand von vor 4 Tagen) und die ID 400 (die ID die beim ihm angzeigt wurde von vor 4 Tagen) auf dem er sich das letzte mal befand.
Weil jetzt aber 50 Einträge dazugekommen sind aber auch in diesen 4 Tagen vllt 40 Einträge gelöscht wurden
ändert sich doch die Seiten zahl auf dem sich der Benutzer befand oder irre ich mich da?!

Deswegen wollte ich die Grenzen setzten.
 
Zuletzt bearbeitet:
Mahlzeit,

Ich denke dein Problem hat weniger mit PHP zu tun als mit SQL.
Für bessere Hilfe würde ich daher schonmal den Titel ändern ;-)

Zu deinem Problem:
Du hast einen Startpunkt auf den sich die Blätter-Funktion bezieht (Funktion "Blättern").
Einträge die zeitlich nach dem Startpunkt liegen dürfen sich nicht auf die Blätter-Funktion auswirken (Funktion "Aktualisieren").

Daher folgendes Select für dich:
Code:
SELECT ... FROM ... WHERE ... AND `ID-TEXT` <= 80
ORDER BY `ID-TEXT`
LIMIT a, b
Damit blätterst du nur in den "alten" Ergebnissen
und die Ergebnisse der gewählten Seite unterscheiden sich nicht,
wenn neue Einträge hinzugekommen sind.

Gruß
 
Zurück
Oben