Как я могу обновить таблицу на основе подсчета другой таблицы при использовании оператора LIKE
0 Arvind K. [2011-02-14 15:54:00]
Я знаю, как обновить одно поле таблицы из другого подсчета таблицы, используя t1.id = t2.id и т.д., но у меня есть типичная проблема. Я должен использовать предложение LIKE STATEMENT в WHERE.
Это то, что я хотел сделать.
UPDATE `CATEGORIES`
SET `num_listings` = (SELECT COUNT(*)
FROM `LISTINGS`
WHERE `LISTINGS`.`CATEGORY` LIKE
ws_concat('', "%-", `CATEGORIES`.`ID`, "-%"));
(Пример: у меня есть CATEGORY, сохраненная как -25- в таблице LISTINGS в качестве имени поля CATEGORY)
Я понимаю, что я не могу использовать ws_contact здесь, но есть ли другой способ его достижения?
Спасибо заранее.
mysql subquery
1 ответ
0 Galz [2011-02-14 16:09:00]
Если нет веской причины для того, чтобы идентификатор категории был представлен только частью строки в таблице списков, наилучшим способом обработки такой структуры данных является добавить столбец category_id в LISTINGS table и убедитесь, что при добавлении или редактировании списка этот столбец заполнен правильно.
Это позволило бы просто JOIN
двум таблицам ON categories.id = listings.category_id
и иметь гораздо больше смысла. Это также обеспечит лучшую производительность.
Если вы хотите сохранить структуру БД как есть, вы можете использовать временную таблицу с LIKE и CONCAT:
DROP TABLE IF EXISTS temp;
CREATE TABLE temp AS
SELECT categories.id, COUNT(*) AS c
FROM categories
JOIN listings ON listings.category LIKE CONCAT('%',categories.id,'%')
GROUP BY categories.id;
UPDATE categories, temp
SET categories.num_listings = temp.c
WHERE categories.id = temp.id;