2016-04-14 6 views
1

Ich habe DB der Beiträge bestellen:Wie mit von heißen/steigenden Beiträgen

post_id(int(7)) user_id(int(7)) post_txt(text) post_time(varchar(30)) likes_count(int(10)) 

(die post_time aussehen ist diese „2016.05.04 17.41“)

Ich mag bestelle es durch "heiße posts" zb "likes_count/post_time".

Wie kann ich es tun? Diese

ist, wie ich es jetzt tun:

$que_post=mysql_query("select * from user_post order by post_id desc"); 

PS. Ich weiß, dass dies nicht, wie Sie gerne in der Regel zu speichern, aber ich mache es für einen bestimmten Zweck

Bearbeiten-Beispieldaten:

97||25||Hello world||8-4-2016 14:19||19 

Der Algorithmus ich verwenden möchte Zeit ist/mag. Ich kenne seinen schlechten Algorithmus, aber ich möchte nur die Grundlagen verstehen. Ich würde gerne wissen, ob Sie eine gute Algorithmus wissen, dass

+5

Bieten: (1) Beispieldaten; (2) gewünschte Ergebnisse; und (3) die Regeln, die Sie für "heiße Posts" verwenden. –

+0

Mit "likes_count/post_time" meinen Sie wörtlich die likes_count dividiert durch die post time? Wenn das der Fall ist, scheint das ein schlechter Algorithmus zu sein, weil neuere Inhalte weniger heiß als heiß sind. – Chris

+1

Verwenden Sie nicht 'mysql_ *' es wurde entfernt und es wird nicht mehr funktionieren, verwenden Sie 'PDO' [link] (http://php.net/manual/de/book.pdo.php) oder mysqli' [ link] (http://php.net/manual/en/book.mysqli.php) statt. – Tom

Antwort

1

Sie sollten (lesen manual) zu DATETIME Art von post_time Feld ändern. Alle Zeilen müssen durch ein Skript in das Format YYYY-MM-DD HH:MM:SS konvertiert werden. Wenn Sie es tun, wird alles funktionieren.

Ihr Problem erscheint Ursache für die Sortierung nach Alphabet als Text. Zum Beispiel: 01.01.2016 als Text ist weniger als 31.01.1999.

+0

Ich habe die SQL bereits gebaut, aber ich werde es ändern.Nehmen wir an, dass seine DATATIME, wie kann ich es jetzt tun? –

+0

Sie können Feld 'new_post_time' hinzufügen, und aktualisieren Sie mit' STR_TO_DATE ('8-4-2016 14:19', '% m-% d-% Y% H:% i') '- um Ihre Daten zu konvertieren um das Format zu korrigieren. – Andrewus

0

Angenommen, Sie können die Spalte post_time konvertieren, um einen Datumstyp zu verwenden. Sie möchten die Anzahl der Sekunden zwischen diesem Zeitpunkt und jetzt, z.

Order By like_count/(unix_timestamp(now()) - unix_timestamp(post_time)) Desc; 

Wenn der Spaltentyp zu ändern ist keine Option, können Sie es on-the-fly konvertieren die str_to_date Funktion, aber das wird möglicherweise ein langsamer Vorgang recht sein.