#php #mysql #codeigniter
#php #mysql #codeigniter
Вопрос:
Поэтому мне интересно, является ли это вообще лучшим способом управления моими данными для этой таблицы, потому что с помощью моего запроса я не получаю желаемых правильных результатов.
Я хочу, чтобы он попал в рейтинг top5 по последней записи даты в таблице. Проблема заключается в том, что для идентификатора character_id есть 0. Когда я делаю свой php, чтобы увидеть, нет ли значения, тогда он должен отображать TBD, но он по-прежнему не отображает его в массиве равным 0.
Таблица: top5
id ranking # character_id status_id date_created
1 1 1 1 2011-10-17 17:18:54
2 2 2 1 2011-10-17 17:18:54
3 3 3 1 2011-10-17 17:18:54
4 4 4 1 2011-10-17 17:18:54
5 5 5 1 2011-10-17 17:18:54
6 1 6 1 2011-10-24 12:18:54
7 2 7 1 2011-10-24 12:18:54
8 3 8 1 2011-10-24 12:18:54
9 4 9 1 2011-10-24 12:18:54
10 5 0 1 2011-10-24 12:18:54
function getTop5()
{
$this->db->select('characters.character_name, top5.character_id');
$this->db->from('top5');
$this->db->join('characters', 'characters.id = top5.character_id');
$this->db->where('top5.status_id', '1');
$this->db->order_by('top5.date_created','desc');
$this->db->limit(5);
$query = $this->db->get();
return $query->result_array();
}
Array ( [0] =>
Array ( [character_name] => "Mr. Magnificent" Matt Sharp
[character_id] => 9 )
[1] =>
Array ( [character_name] => "The Unforgettable" Jimmy Watkins
[character_id] => 8 )
[2] =>
Array ( [character_name] => Romie Rains
[character_id] => 7 )
[3] =>
Array ( [character_name] => Monica Dawson
[character_id] => 6 )
[4] =>
Array ( [character_name] => "The Outlaw" Mike Mayhem
[character_id] => 5 ) )
РЕДАКТИРОВАТЬ: кто-нибудь еще хочет попробовать?
Так потерялся и до сих пор не могу получить желаемых результатов
Комментарии:
1. Я думаю, вы хотите
order_by('top5.ranking');
2. Я предполагаю, что последний день — 24-й?
3. «последний день» означает текущий день или вчера? Или дата последней записи в таблице?
Ответ №1:
Вы хотели бы упорядочить по top5.date_created
в порядке убывания. Если вам действительно нужен только последний день, вам также нужно условие WHERE для этого.
Ответ №2:
Не уверен, что это за класс db, но просто добавьте
AND date(date_created) = CURDATE();
к запросу
или добавить DESC
к ORDER
предложению
Итак, что-то вроде
$this->db->select('characters.character_name, top5.character_id');
$this->db->from('top5');
$this->db->join('characters', 'characters.id = top5.character_id');
$this->db->where('top5.status_id', '1');
// WHERE date(top5.date_created) = CURDATE()
$this->db->order_by('top5.date_created');
$this->db->limit(5);
$query = $this->db->get();
Комментарии:
1.
NOW()
также включает время, поэтому не получится получить все в один и тот же день. Вы хотели бы сделатьAND DATE(date_created) = CURDATE()
2. Я обновил свой пост, указав, как выглядит возвращаемый массив, что не является правильной информацией.
3. @BrianGlaz: ах, спасибо. Я никогда не работал со столбцом даты, поэтому я не знал об этом
4. Это не сработает, Брайан, потому что это будет для каждого месяца, поэтому одинаковые результаты должны быть за одно и то же время через 3 недели.
5. Итак, мне нужно добавить в строку с комментариями?
Ответ №3:
function getTop5()
{
$this->db->select('characters.character_name, top5.character_id');
$this->db->from('top5');
$this->db->join('characters', 'characters.id = top5.character_id');
$this->db->join( '( SELECT DATE(MAX(date_created)) AS lastdate
FROM top5
WHERE status_id = 1
) AS tm'
, 'top5.created_at >= tm.lastdate
AND top5.created_at < tm.lastdate INTERVAL 1 DAY');
$this->db->where('top5.status_id', '1');
$this->db->order_by('top5.ranking','asc');
$this->db->limit(5);
$query = $this->db->get();
return $query->result_array();
}
Комментарии:
1. Это не с последнего дня, а с последней записи даты. Есть разница.
2. @Mr.Magoo: Я не могу понять, о чем ваш последний комментарий. Последний день, последняя дата, в чем разница?
3. Это последняя запись даты. Итак, из таблицы это будут нижние 5 записей, потому что их дата более поздняя.
4. Я думал, что мне это понадобится для этого запроса. Все это написано для CodeIgniter.
5. Ваш запрос должен работать правильно и показывать последние 5 записей (с status_id = 1). Если только ваши методы (например
limit()
, один) не работают должным образом.