Я построил Twitter как следующую систему с использованием PHP и Mysql, и я хотел бы указать последователей, которые пользователь имеет в порядке, в котором они следовали за пользователем. Существуют две реляционные таблицы, которые относятся к этому действию: USERS и FOLLOW.Как отобразить в определенном порядке набор результатов из одной таблицы MySQL на основе другого параметра таблицы
user_id
тот, за которым следуют.
follow_id
тот, который следующий.
created
дата, в которой произошло следующее.
FOLLOW
--------------------------------------------------
|user_id |follow_id | created |
--------------------------------------------------
| 23 | 5 |2016-08-09 |
--------------------------------------------------
ПОЛЬЗОВАТЕЛЕЙ
--------------------------------------------------
|user_id | name |
-------------------------------------------------
| 5 |John Doe|
--------------------------------------------------
Эта функция PHP MySQL, чтобы получить последователей для определенного пользователя.
<?php
public static function find_followers($user_id){
global $database;
$followers_ids = array();
$sql = "SELECT user_id
FROM follow
WHERE followed_id = '{$user_id}'
ORDER BY created";
$result = $database->query($sql);
while($follower = $database->fetch_array($result)){
array_push($followers_ids, $follower['user_id']);
}
if(count($followers_ids)){
$id_strings = join(',', $followers_ids);
$sql = "SELECT * FROM users WHERE id IN ($id_strings)";
$followers = self::find_by_sql($sql);
return $followers;
}
}
?>
Код для Dislay последователей
<?php
$followers = find_followers($id);
foreach($followers as $follower){
echo $follower->full_name() . "followed you.<br/>";
?>
В настоящее время список последователей заказывается по созданию, на котором были созданы пользователи, и я хотел бы, чтобы отобразить их на основании, когда порядок, в котором они последовали за пользователем. Как это может быть сделано?
Заранее благодарен!
Здесь вы используете какую-то инфраструктуру, которая предоставляет 'find_by_sql', но неясно, какой из них. Вы также создаете запросы с помощью [SQL injection bugs] (http://bobby-tables.com/), потому что вы не используете подготовленные операторы. У вашей структуры должен быть рекомендованный способ сделать это безопасным. – tadman
@tadman Похож на простой класс для меня, просто не показал нам все это – RiggsFolly
** ПРЕДУПРЕЖДЕНИЕ **: Вероятно, в этом коде есть несколько [SQL-инъекций] (http://bobby-tables.com/). По возможности используйте ** подготовленные заявления **. Это довольно просто сделать в ['mysqli'] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) и [PDO] (http://php.net/manual/ ru/pdo.prepared-statements.php), где любые предоставленные пользователем данные указываются с индикатором '?' или ': name', который позже заполняется с помощью' bind_param' или 'execute' в зависимости от того, какой из них вы используете. – tadman