keramzit_001
@keramzit_001
эх!!!

Как правильно написать запрос к БД, если в столбце значения поля (тип text) вида ["x"]?

В таблице значения поля хранятся в виде ["x"] или ["x","x"] где х=число - это номер tag_id
При создании таблицы столбец `tag_id` text NOT NULL
Это поле Массив. Главная особенность столбца с данными - это кавычки ["значение"]
public static function getItems($equiv) {
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);

		if(!is_array($equiv)) {
			$equiv = (array) json_decode($equiv);
		}
		
		$equiv = implode(',', $equiv);

		$query->select($db->quoteName(array('item_id')));
		$query->from($db->quoteName('#__items'));
		$query->where($db->quoteName('tag_id').' IN ' .$equiv ); 

		$db->setQuery($query);
		
		return $db->loadObjectList();
		
	}

Массив перевожу в строку функцией implode.
Пробовал операторы: IN,=,LIKE.
mySql постоянно ругается на синтаксис, но цифровые значения tag_id выводит корректно.
ОШИБКА: 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

Пробовал так:
$query->where($db->quoteName('tag_id'). ' IN ["' . implode(', ', $equiv) .'"]' );

Всё равно ошибка.
Из view.php передаю значение item->tag_id в helper.php где запросом хочу выбрать материалы с такими же тегами или тегом.

Генерируемый запрос:
SQL=SELECT `item_id`` FROM `items` WHERE `tag_id` IN ["1"]


В столбце tag_id хранится массив формата json.

Как написать условие where для сравнения?
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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