Я отвратительный человек из MSSQL, поэтому я делаю вывод, что некоторые из них будут работать в MySQL ...
SELECT
wall.Wid,
wall.uid,
wall.wcomment,
wall.name,
comment.id,
comment.comment,
comment.wid
FROM
wall
LEFT JOIN
comment
ON comment.id IN (SELECT id FROM comment WHERE wid = wall.wid ORDER BY id DESC LIMIT 4)
WHERE
wall.uid IN (SELECT fid from friends where uid = 3)
AND wall.Wid IN (SELECT Wid FROM wall ORDER BY Wid DESC LIMIT 30)
Примечание: MSSQL Server теперь очень хорош в оптимизации условий IN для выполнения так же хорошо, как и для соединений. Я не имею представления о производительности MySQL в этом отношении.
EDIT:
Если вы не можете использовать LIMIT таким образом, то вам, кажется, придется написать запрос, который получает все комментарии, но затем добавить некоторые условия, чтобы удалить те, которые вам не нужны. Казалось бы, это связано с вычислением «номера строки» для каждого комментария, о котором я могу думать только одним способом, и это может быть не особенно эффективным ...
SELECT
wall.Wid,
wall.uid,
wall.wcomment,
wall.name,
comment.id,
comment.comment,
comment.wid
FROM
wall
LEFT JOIN
comment
ON comment.wid = wall.wid
AND 4 >= (
SELECT
COUNT(*)
FROM
comment AS [newer_comment]
WHERE
[newer_comment].wid = comment.wid
AND [newer_comment].date_added > comment.date_added
)
WHERE
wall.uid IN (SELECT fid from friends where uid = 3)
AND 30 >= (
SELECT
COUNT(*)
FROM
wall AS [newer_wall]
WHERE
[newer_wall].uid IN (SELECT fid from friends where uid = 3)
AND [newer_wall].date_added > wall.date_added
)
ПРИМЕЧАНИЕ. Я добавил поле [date_added] в таблицы [wall] и [comment] для определения порядка, в котором вы выбираете «первые 30» записей ...
Для того, чтобы это было даже отдаленно эффективно, необходимо добавить индексы, чтобы сделать подзапросы COUNT (*) максимально быстрыми.
Существует финальная (более сложная, но, возможно, более интеллектуальная и эффективная версия, которую я могу представить позже сегодня, но мне нужно вернуться к работе сейчас. Если это сработает для вас, я опубликую эту «лучшую» версию)