Есть 2 таблицы - посты и комментарии к ним:
**oc_blog**
| blog_id | date_added | count_read |
| 1 | 04.04.18 | 10 |
| 2 | 05.04.18 | 2 |
| 3 | 06.04.18 | 5 |
| 4 | 07.04.18 | 1 |
**oc_blog_comment**
| blog_id | date_added | comment |
| 1 | 05.04.18 | blabla |
| 3 | 05.04.18 | blabla |
Связываю их таким запросом
$sql = "SELECT * FROM " .
DB_PREFIX . "blog i
LEFT JOIN " . DB_PREFIX . "blog_description id ON (i.blog_id = id.blog_id)
LEFT JOIN " . DB_PREFIX . "blog_to_store i2s ON (i.blog_id = i2s.blog_id)
LEFT JOIN " . DB_PREFIX . "blog_comment ic ON (i.blog_id = ic.blog_id)
WHERE
id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND
i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND
i.status = '1' AND
i.sort_order <> '-1'";
Выборку потом делаю $sql .= " ORDER BY comment DESC, i.blog_id LIMIT " . (int)$start . "," . (int)$limit;
Но при этом, выдаются даты постов 01.01.1970. Как я понимаю, это в результате того, что постам из первой таблицы присваиваются даты размещения комментариев - из второй таблицы, а недостающие забиваются нулями.
Вопрос - как правильно их связать, чтоб даты комментариев не замещали даты постов?
Это модуль Opencart`a. Данный файл - модель, он делает запрос в базу (запрос написал выше) и затем передает контролеру:
$query = $this->db->query($sql);
return $query->rows;
Контролер потом разбирает этот ответ. В частности, дата берется так:
'date_added_full' => date(
$this->language->get('date_format_short'),
strtotime($result['date_added'])
)
Проблема в том, что у Вас в двух таблицах есть поле с именем date_added
и обращаясь к полю как $result['date_added']
Вы обращаетесь к полю другой таблицы.
Решение проблемы, в выборке дать полям различные имена
$sql = "SELECT
i.`date_added` AS `post_date`,
ic.`date_added` AS `comment_date`
FROM " .
DB_PREFIX . "blog i
LEFT JOIN " . DB_PREFIX . "blog_description id ON (i.blog_id = id.blog_id)
LEFT JOIN " . DB_PREFIX . "blog_to_store i2s ON (i.blog_id = i2s.blog_id)
LEFT JOIN " . DB_PREFIX . "blog_comment ic ON (i.blog_id = ic.blog_id)
WHERE
id.language_id = '" . (int)$this->config->get('config_language_id') . "' AND
i2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND
i.status = '1' AND
i.sort_order <> '-1'";
'date_added_full' => date(
$this->language->get('date_format_short'),
strtotime($result['post_added'])
)
Или, если второе поле не нужно, не выбирать его.
А самое главное - НИКОГДА не использовать конструкцию SELECT * FROM
! Всегда указывать список конкретных полей, которые нужно выбрать, даже если этих полей десятки. На одни грабли, связанные с этой конструкцией, Вы уже наступили. Поверьте, есть еще и не одни
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Данным запросом, получаю дерево категорий, но есть еще столбец code, как на базе данного запроса, получить только объединенную строку code в порядке...
Вот таким кодом я изменил дефолтное значение в mysql:
Работаю над тем, чтобы поддерживать очень старую фрейм-структуру, и теперь настало время ее обновить, чтобы поддержать композер и symfony-формы
Написал скрипт, который автоматически будет определять робота и на лету делать для него снапшот страницыНаписал код в php, который проверяет,...