Используя PHP и MySQL, я интегрирую сайт с вики, основанной на MediaWiki, так что профили пользователей на сайте имеют некоторую статистику об их вкладе в вики.
Я хочу показать последние 3 отредактированные статьи пользователя в пространстве имен (основное, id 0), без повторения и ссылки на них .
Для этого я делаю более или менее следующее:
// getting the article IDs
$db->query("SELECT DISTINCT rev_page
FROM revision r, page p
WHERE r.rev_page = p.page_id
AND p.page_namespace = 0
AND rev_user = {$userId}
ORDER BY r.rev_timestamp DESC
LIMIT 3");
// then the IDs are stored in $last_edited_ids...
// getting the names of the articles
$db->query("SELECT page_title
FROM page WHERE page_id
IN (" . implode($last_edited_ids, ',') . ")");
Проблема в том, что я не уверен, что это правильно, хотя он работает большую часть времени : для некоторых пользователей старая статья отображается как последняя отредактированная, но 2-й и 3-й результаты верны , Это заставляет меня думать, что я, должно быть, делаю что-то не так, но SQL не моя сильная сторона ...
Подсказка: если вы не знаете схему базы данных MediaWiki (она довольно автообъяснительна), вы можете посмотреть ее здесь .