SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 10.12.2014 21:36:22

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Таблица со связями тегов с постами: обновление с условием

Здравствуйте,

Есть таблица c тегами и таблица со связями тегов с постами

tags
------------------------------------
tags_id, tags_name
1           Видео
2           Прикол
3           Видео прикол


tags_link
tags_id, post_id
1           1
2           1
1           2


Не получается составить запрос:
Посты которые принадлежат тегам "Видео AND Прикол" сделать чтобы принадлежали тегу "Видео прикол".
Подскажите пожалуйста, мозг уже пухнет, не могу сделать.

Подумал может так , но нет

SELECT GROUP_CONCAT(t.tags_name) AS tags_concat FROM tags_link tl, tags t
WHERE t.tags_id = tl.tags_id
AND tags_concat LIKE 'Видео' AND  tags_concat LIKE 'Прикол'
GROUP BY tl.post_id

Отредактированно Марк (10.12.2014 21:52:54)

Неактивен

 

#2 10.12.2014 22:44:28

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Таблица со связями тегов с постами: обновление с условием

Если я правильно понял и вам нужно добавить в приведенном примере в таблицу tags_link новую запись (3,1), то

CREATE TEMPORARY TABLE test (a int);
INSERT INTO test SELECT post_id FROM tags_link tl WHERE tags_id IN (1,2) GROUP BY 1 HAVING count(*)=2;
INSERT INTO tags_link SELECT 3, a FROM test;
DROP TABLE test;

Неактивен

 

#3 10.12.2014 23:40:03

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Таблица со связями тегов с постами: обновление с условием

Немножко не так, мне нужно присвоить постам новый тег. Т.е заменить теги постам которые содержат тег "Видео" AND тег "Прикол" на тег Видео прикол)

Думаю может записать их во временную таблицу как у вас используя

SELECT GROUP_CONCAT(t.tags_name) AS tags_concat FROM tags_link tl, tags t
WHERE t.tags_id = tl.tags_id
GROUP BY tl.post_id

А потом уже спокойно что хочу)

Отредактированно Марк (10.12.2014 23:42:07)

Неактивен

 

#4 11.12.2014 03:50:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Таблица со связями тегов с постами: обновление с условием

Совсем непонятно. Покажите на примере, что у вас в исходных данных и что вы хотите получить в результате выполнения запроса.

Неактивен

 

#5 11.12.2014 13:19:22

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Таблица со связями тегов с постами: обновление с условием

Исходные данные:

tags
------------------------------------
tags_id, tags_name
1           Видео
2           Прикол
3           Видео прикол


tags_link
-----------------------------------
tags_id, post_id
1           1
2           1
1           2

А вот так хочется чтобы стало

tags_link
tags_id, post_id
3           1
3           1
1           2

Т.е посты у которых  "Видео AND Прикол" перезаписываются с ID 3 (Видео прикол)

Но получается что старые связи тоже нужно удалить чтобы дублей небыло.. походу не все так просто

Отредактированно Марк (11.12.2014 13:21:05)

Неактивен

 

#6 11.12.2014 14:05:03

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Таблица со связями тегов с постами: обновление с условием

CREATE TEMPORARY TABLE test (a int);
INSERT INTO test SELECT post_id FROM tags_link tl WHERE tags_id IN (1,2) GROUP BY 1 HAVING count(*)=2;
INSERT INTO tags_link SELECT 3, a FROM test;
DELETE tags_link FROM tags_link JOIN test ON post_id=a WHERE tags_id IN (1,2);
DROP TABLE test;

Неактивен

 

#7 11.12.2014 18:57:14

Марк
Активист
Зарегистрирован: 31.05.2010
Сообщений: 157

Re: Таблица со связями тегов с постами: обновление с условием

Благодарю, то что и нужно))

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson