Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Вопрос по mysql

Вопрос по mysql


     20.08.2014    Все вопросы » MySQL    2481

вопрос
Есть запрос
$db->query("SELECT a.*, c.* FROM ".PREFIX."_table1_list t1 LEFT JOIN ".PREFIX."_table2 t2 ON t2.id = REPLACE(t1.row,',',' or t2.id = ')");

В ячейке t1.row данные хранятся в цифровом формате, через кому, а чтобы вывести все данные нужно заменить эту кому на or t2.id = проблема в том, что реплейс не срабатывает в mysql, приходится использовать два запроса, первый на выборку, затем через str_replace меняем значение и вписываем в новый запрос, как этого избежать?

Ответил: iChudo


В MySQL можно использовать функцию REPLACE внутри запроса для замены запятых на строку ' or t2.id = '.

В вашем случае, запрос может выглядеть следующим образом:


$db->query("SELECT a.*, c.* FROM ".PREFIX."_table1_list t1 LEFT JOIN ".PREFIX."_table2 t2 ON FIND_IN_SET(t2.id, REPLACE(t1.row, ',', ' or t2.id = ')) > 0");


Вместо REPLACE мы используем функцию FIND_IN_SET, которая ищет значение t2.id в строке, разделенной запятыми, и возвращает его позицию. Затем мы проверяем, что эта позиция больше нуля, чтобы убедиться, что значение найдено.

Таким образом, данный запрос выполняет выборку всех записей из таблицы table1_list, в которых значение поля row содержит значение, указанное в поле id таблицы table2.

Вы можете адаптировать этот запрос для своей базы данных и использовать его в вашем коде.
Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 28.03.2014 i_loves_ac_dc  MySQL
наверх