Ich habe eine Tabelle namens products
in einer MySQL-Datenbank. products
sieht etwas wie das aus:
Offensichtlich habe ich mehrere Spalten weggelassen, die für meine Frage nicht wichtig sind. Wenn ich diese Tabelle abfrage, sortiere ich nach einer von mehreren verschiedenen Spalten (Die Benutzerschnittstelle erlaubt einzelnen Benutzern, die Sortierspalte und -reihenfolge zu ändern), und ich kann eine Suchklausel haben, in welchem Fall ich eine LIKE-Klausel machen werde NAME und DIN.
Was ich wissen möchte, ist, dass die Sortierungsinformationen und die Suchinformationen und die ID eines bestimmten Produkts (sprich ich habe nach 004 gesucht, die 3 Ergebnisse zurückgegeben haben, und ich sehe einen von ihnen), wie könnte ich bekommen die nächsten und vorherigen Produkte?
Ich muss dies tun, denn wenn ein Benutzer nach dem Suchen und Sortieren von Ergebnissen auf eines der Produkte klickt, kann er durch die Ergebnisse blättern, ohne zur vorherigen Seite zu gehen.
Gibt es eine gute und effiziente Möglichkeit, dies in SQL zu tun, oder verwende ich am besten PHP? Irgendwelche Ideen sind auch willkommen.
Derzeit wird diese SQL-Abfrage verwendet, bei der Probleme auftreten, wenn ich nach der Spalte strength
sortiere, da doppelte Werte vorhanden sind
Mein PHP-Code (mit WordPress) (entworfen, um den nächsten Artikel zu bekommen)
%Vor%Sie müssen einen Verweis auf den aktuellen Datensatz haben und dann anhand der sortierten Spalten fortlaufend nach dem nächsten Datensatz suchen. Im folgenden Beispiel wird davon ausgegangen, dass es nach
sortiert ist %Vor%Erstens:
%Vor% Weiter: ( vergewissere dich, dass du CURR.ID = 6
und die AND-ORs mit richtigen Klammern trenne! )
Eine funktionierende Probe, die unten vorgestellt wird
%Vor%Wenn current die Zeile mit ID = 6 ist, kann der nächste Datensatz mit
abgerufen werden %Vor%Ohne eine Persistenz-Cache-Schicht wie memcached , in der Sie die Ergebnisse speichern und abrufen können, ohne die Abfrage erneut auszugeben, kann eine einfache Lösung aktiviert werden der Abfragecache in mysql. Wenn auf diese Weise der Cache nicht von anderen Abfragen ungültig gemacht wird, werden die Kosten für das Ziehen des Ergebnisses gesenkt, wenn Sie die Abfrage erneut ausgeben.
Interessante Frage. Ich denke nicht, dass du es in einer Abfrage machen kannst, aber du kannst es vielleicht mit drei ablegen.
Die erste Abfrage ruft die Antwortzeile ab. Der Trick wäre, den Wert für die Spalte beizubehalten, nach der sie sortiert wurden. Nehmen wir an, dies ist "SortedColumn" und der Wert ist "M". Nehmen wir an, die ID der Zeile, die Sie erhalten haben, war 10.
Ihre zweite Abfrage wäre die gleiche wie die erste, wäre aber "top 1" und würde zur where-Klausel "... and sortedColumn & gt; = 'M' und id & lt; & gt; 10" Dies wird hinzugefügt Du die nächste Reihe. Vielleicht möchten Sie 10 Zeilen zurückgeben und an ihnen festhalten, um dies immer wieder zu vermeiden.
Um das vorherige zu erhalten, wechseln Sie Ihre Reihenfolge auf absteigend, und die Where-Klausel, die Sie hinzufügen, ist "... und sortColumn & lt; = 'M' und id & lt; & gt; 10". Dadurch erhalten Sie die vorherige Zeile. Auch hier können 10 Zeilen für Ihren Benutzer hilfreicher sein.
Hoffe, das hilft.
Tags und Links sql php mysql pagination