@ElvisP

Как объединить два SQL запроса в один?

У меня есть запрос:

$db->query( "SELECT p.id, p.date, p.title, p.category, p.country, p.autor, p.alt_name, p.comm_num, p.approve, p.fixed, e.news_read, e.votes, e.user_id, e.need_pass FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) " . $where . " ORDER BY " . $order_by . " LIMIT {$start_from},{$news_per_page}" );

В p.country, хранятся ID стран в таком виде:
1 новость (1 , 2)
2 новость (3)
3 новость (1, 3)

Есть другая таблица world_country, где каждому 'ID' соответствующие значения прописано в столбце 'name'.

Как подставить вместо ID в новостях, чтобы в конечном результате получилось - 1 новость (Россия, США), 2 новость (Англия), 3 новость (Россия, Англия)?
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
@galaxy
По-моему, в PHP правильнее будет объединить: таблица стран, очевидно, небольшая, ее можно выгрузить и закешировать в виде массива ID => NAME. Потом просто в PHP подставлять вместо ID названия.

На sql сделать можно, конечно, но будет уродливо и не особо производительно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Akina
Сетевой и системный админ, SQL-программист.
Как обычно - кривая структура хранения приводит к проблемам при обработке.

SELECT p.*, GROUP_CONCAT(c.name) countries
FROM p
JOIN с ON FIND_IN_SET(c.id, p.country)
GROUP BY p.id

Если в поле p.country к тому же имеются паразитные пробелы- перед связыванием их необходимо удалить.

Настоятельный совет - нормализовать данные. CSV - это крайне неудачное решение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы