2017-02-10 34 views
0

Ich möchte 20 Zeilen mit Tabellendaten erstellen, um zuletzt angezeigte Seiten zu speichern. Die Tabellenzeile sollte nicht über 20 Zeilen ansteigen.FIFO-Typ Zuletzt angezeigte Seiten

Für ein Beispiel werden die ersten 20 Zeilen der Seiten-ID mit Titel in dieser Tabelle gespeichert. Wenn die 21. Seite von dem Benutzer betrachtet wird, werden die erste Post-ID und der Post-Titel gelöscht (d. h. der zuerst betrachtete Post) und in die gleiche Tabelle eingefügt (d. h. der zuletzt betrachtete Post).

mein Tabellenformat:

-------------------------------| 
ID  |  Post Title 
-------------------------------| 
1  |  Post Title 1 
2  |  Post Title 2 
3  |  Post Title 3 
... 
20  |  Post Title 20 
-------------------------------| 

wenn jemand bitte sagen Sie mir, wie das mit optimierten qry zu tun.

+0

Welche Art von Optimierung erwarten Sie? – WeAreRight

+0

fügen Sie ein Zeitstempelfeld hinzu, in dem Sie die angezeigte Zeit speichern ** jetzt() **, dann können Sie es durch dieses Feld bestellen –

+0

zuerst lösche ich die erste hinzugefügte Reihe. zweitens lege ich die zuletzt angesehene Seiten-ID ein. es wird ein Problem bekommen, wenn die Website riesigen Traffic.Since pro Minute bekommt diese Website 300 Anfragen vom Benutzer. Ich bin nicht daran interessiert, mehr Abfragen in dieser Tabelle zu speichern. ich will, wird diese Abfrage ohne Unterbrechung sogar hohe Verkehrsaufkommen laufen. –

Antwort

1

Sie haben zwei Spalten-ID und Titel. Nehmen wir an, dass die ID einen Wert von mehr als 20 haben wird. Diese Tabelle enthält zu jeder Zeit maximal 20 Zeilen (je nach Bedarf).

Understand following terms: 
min(id)   // will give minimum value in column id 
max(id)   // will give maximum value in column id 
count(id)   // counts total number of rows of your table 
new_id    // id of row which will be inserted next 

Algorithmus:

if(count(id)<20) // table have less than 20 rows so only insert 
     new_id = max(id)+1 
     insert the row with id as 'new_id' and page title 
else  // table have more than 20 rows so delete and then insert 
     delete row with id = min(id) 
     new_id = max(id)+1 
     insert the row with id as 'new_id' and page title 

Was obige Lösung vorschlagen, wenn Sie weniger als 20 Zeilen auf Einfügen halten, weil der Raum ist immer noch da einzufügen. Wenn Sie jedoch sehen, dass Zeilen größer oder gleich 20 sind, löschen Sie zuerst die Zeile mit der Mindest-ID und fügen Sie dann die neue Zeile mit der maximalen ID der Spalte ein, indem Sie eine hinzufügen.

+0

Fist angesehene Post wird zuerst gelöscht und zuletzt Post wird hinzugefügt. Ich benutze diese Tabelle für den letzten Post vom Benutzer. und diese Website erhält 150 bis 300 Benutzer pro Minute. Wenn ich alle Daten in dieser Tabelle speichere, wird es riesig. –

+0

Ich glaube, du hast meine Logik nicht verstanden, wirst meine Antwort mit mehr Klarheit aktualisieren. – WeAreRight

0

können Sie wie folgt vorgehen:

LOCK TABLES mytable; 

INSERT INTO mytable (title) VALUES ('newtitle'); 

DELETE t FROM mytable t WHERE t.id IN (SELECT t2.id FROM (SELECT * FROM mytable) t2 ORDER BY t2.id DESC LIMIT 20,999999999); --Delete from 20 to "end" 

UNLOCK TABLES; 
0
  1. Zuerst wie Erstellungsdatum
  2. eine Spalte in der Tabelle hinzufügen müssen, während neuen Datensatz dieser Tabelle einfügen, erste Überprüfung Gesamtanzahl der Zeilen in der Tabelle
  3. Wenn Zeilen == 20 zählen, dann schreibe eine Abfrage, um einen alten Datensatz zu löschen. verwenden created_date es um herauszufinden, ...
  4. wenn Zeilenanzahl ist < 20, dann können Sie die Aufnahme direkt einfügen ... keine Pre-Check-in erforderlich

Above Schritt in nur einer Abfrage verwaltet werden Wenn Sie Fragen Sie beim Schreiben gut sind

0

wenn Benutzer eine Seite angesehen hat:

$query = mysqli_query("SELECT COUNT(ID) From your-table",$conn); 
$result = mysqli_fetch_array($query); 
$total = $row[0]; 

if($total<20){ 
    //INSERT NEW ROW 
    $query = "INSERT INTO your-table() values(...,...)"; 
    //etc ... 
} else{ 
    // DELETE THE FIRST ROW 
    $query = "DELETE FROM your-table ORDER BY ID ASC LIMIT 1"; 
    // Then insert new row, etc... 
} 
+0

Danke für den Code. Wird dieser Code ein Problem bekommen, wenn die Website mehr Traffic bekommt? –