Хорошо, у меня есть две таблицы.
Таблица 'topic'
tid | posts
------------
1 4
3 2
Таблица 'posts'
topic_id | post
-----------------
1 xxxx
3 aaaa
1 dddd
1 ddsdss
3 rreer
1 gsdsd
Мой абстрактный запрос выглядит так:
select counter(*) as c
from posts as p, topic as t
where p.tid = t.topicid
and c != t.posts
Это должно вернуть счетчик всех строк таблицы 'posts', который совпадает с tid таблицы 'topic', а также не совпадает со счетчиком сообщений Table 'topic'.
Также мне нужнообновите столбец "сообщений" темы значением счетчика (*), если он будет отличаться.
update topic set posts = (SELECT COUNT(*) from posts WHERE posts.topicid = topic.tid and topic.posts <> (SELECT COUNT(*) from posts WHERE posts.topicid = topic.tid))
Я пробовал много способов заставить это работать, но не смог выяснить.Был бы очень признателен, если кто-нибудь может объяснить запрос для этого случая?
На самом деле я пытаюсь сделать это.Я хочу обновить счетчик сообщений темы для всех соответствующих идентификаторов тем между таблицами, если количество сообщений в таблице «сообщений» не соответствует счетчику сообщений в таблице «тем».Вы меня понимаете?Я попытался поиграть с вашим запросом, но вместо этого он дает мне другие строки таблицы «Темы», чего я не хочу.
UPDATE topics SET posts = (
SELECT COUNT(*)
FROM posts
WHERE topicid = (
SELECT tid
FROM topics
WHERE topics.tid = topicid
)
GROUP BY topicid HAVING COUNT(*) <> (
SELECT posts
FROM topics WHERE topics.tid = topicid
)
) **WHERE tid = (
SELECT topicid
FROM posts
WHERE topicid = (
SELECT tid
FROM topics
WHERE topics.tid = topicid
) GROUP BY topicid HAVING COUNT(*) <> (
SELECT posts FROM topics WHERE topics.tid = topicid
)
)**