Stack:
Я пытаюсь превратить профиль пользователя моего веб-сайта в страницу стиля фида.В настоящее время профиль показывает некоторую статистику пользователей вверху, затем последние 10 комментариев, отправленных пользователем (упорядоченные по убыванию отметки времени), а затем последние 10 отправленных им сообщений.
Вместо этого я хочу сделатьпоследние 20 «действий» (комментарии или публикация) перечислены в порядке отметки времени (поэтому комментарии и материалы будут объединены в списке вместо двух отдельных списков).Вы знаете, как «канал».
Проблема в том, что комментарии извлекаются из таблицы комментариев, а представления извлекаются из таблицы «представления».
Я решилэто довольно неэффективно с помощью запроса объединения, чтобы выбрать «comment_id / submission_id», «поле идентифицирует запись как комментарий или представление», «отметка времени» из обеих таблиц.
Это дает мне результатон сообщает моему идентификатору сущности, а также определяет сущность как комментарий или публикацию, с помощью которой я могу затем выполнить другой запрос через некоторое время mysql_fetch_array, чтобы получить полный комментарий или данные для отправки.
Thisмне кажется, что это просто грязно, поскольку я в основном запрашиваю таблицы, нахожу нужные мне строки / записи (но игнорирую фактические данные, которые мне нужны, поскольку столбцы другой таблицы не совпадают, так как я считаю, что это необходимо длязапрос на объединение), затем, возвращаясь к данным, я впервые проигнорировал отдельные запросы в операторе while ...
Есть лилучший способ сделать это, о котором я не знаю?
Дополнительные примечания:
Пример sql Я в настоящее время использую для создания первоначального результата, о котором я говорил выше:
select comment_id, datatype, timestamp from comments where userid=3
union all
select content_id, datatype, timestamp from submissions where userid=3
ORDER BY timestamp DESC
Возвращает результат, подобный следующему:
commentid datatype timestamp
5201 post 2012-03-27 20:30:40
43761 comment 2012-03-26 21:00:19
43759 comment 2012-03-26 20:59:47
5033 post 2012-03-26 20:57:36
43755 comment 2012-03-26 20:54:57
43745 comment 2012-03-26 16:32:24
Псевдокод, который я могу затем использовать для вывода информации на страницу профиля:
while ($ content_array = mysql_fetch_array ($ вышеуказанный запрос)) {
Индивидуальный запрос на выборку, извлекающий полную строку из таблицы комментариев или таблицы представления по идентификатору в зависимости от $ content_array ['datatype'];
выводит соответствующие данные из отдельныхвыберите запрос на экране профиля довольно красиво;
}
Конечно, это можно сделать лучше?