Вот возможный подход к проблеме.Я предполагаю, что posts_read.has_read_post эквивалентен количеству прочитанных сообщений, а не является числом, однозначно идентифицирующим сообщение среди всех тем.Если это уникальный почтовый идентификатор, то все сложнее.
Сначала создайте запрос, который возвращает два столбца.Столбцы - это номер потока для каждого потока, на который подписан пользователь.Второй столбец - количество сообщений в этой теме.
Это довольно простой запрос для разработки.Я предполагаю, что запрос возвращает столбцы с именами 'thread' и 'posts'.
Теперь мы создадим новый запрос на основе того, который содержит непрочитанные сообщения для каждой такой цепочки.Я предполагаю, что нас интересует пользователь номер 5. Вам нужно будет заменить запрос, который вы уже написали, на OtherQuery (но сохраните скобки).
SELECT other.thread, (other.posts - COALESCE(posts_read.has_read_post,0) )
AS UnreadCount FROM (OtherQuery) other LEFT OUTER JOIN
posts_read ON posts_read.of_thread = other.thread AND posts_read.user=5
Теперь вы, вероятно, хотите добавить WHERE UnreadCount > 0
на этот запрос, чтобы получить только темы с непрочитанными сообщениями.Вы также хотите ORDERBY, но у вас не должно возникнуть проблем с добавлением этого.
Редактировать: Пересмотреть запрос, исходя из предположения, что идентификатор поста строго увеличивается:
SELECT other.thread, (SELECT count(*) FROM posts WHERE
posts.Thread = subscribed_to.thread
AND posts.ID > COALESCE(posts_read.has_read_post,0)
AND Post.Deleted=0) AS UnreadCount
FROM subscribed_to LEFT OUTER JOIN
posts_read ON posts_read.of_thread = subscribed_to.thread AND
posts_read.user=subscribed_to.user
WHERE subscribed_to.user=5
Этот новый запрос подсчитывает непрочитанные сообщения, подсчитывая количество не удаленных сообщений в теме с идентификатором сообщения, превышающим наибольший идентификатор сообщения, прочитанный пользователем.Очевидно, я сделал некоторые предположения о том, как называется таблица публикаций и как она структурирована, но не составит труда настроить ее так, чтобы она соответствовала тому, как выглядит ваша таблица записей: