Как я могу обновить таблицу на основе количества других таблиц при использовании оператора LIKE - PullRequest
0 голосов
/ 14 февраля 2011

Я знаю, как обновить поле одной таблицы из числа других таблиц, используя 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 какимя поля КАТЕГОРИЯ)

Я понимаю, что не могу использовать ws_contact здесь, но есть ли другой способ добиться этого?

Заранее спасибо.

1 Ответ

0 голосов
/ 14 февраля 2011

Если нет веской причины для того, чтобы идентификатор категории был представлен только частью строки в таблице списков, лучший способ обработать такую ​​структуру данных - это добавить столбец 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...