SQL для Вікіпроектів/Список сторінок
Усі колонки із таблиці
ред.Виведемо всі колонки із таблиці сторінок page (Запит у Quarry)
SELECT * FROM ukwikibooks_p.page
Запит повертає всі рядки та всі колонки із таблиці сторінок page. Декілька перших рядків виглядають так:
page_id | page_namespace | page_title | page_restrictions | page_counter | page_is_redirect | page_is_new | page_random | page_touched | page_links_updated | page_latest | page_len | page_no_title_convert | page_content_model |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 0 | Main_Page | 0 | 1 | 0 | 0.425922502496 | 20130412175651 | None | 7988 | 45 | 0 | wikitext | |
2 | 0 | Головна_сторінка | 0 | 0 | 0 | 0.429793028827 | 20161101043156 | 20161101043221 | 19411 | 1441 | 0 | wikitext | |
931 | 10 | Wikibrothers | 0 | 0 | 0 | 0.085830608583 | 20140817194306 | None | 16493 | 1304 | 0 | wikitext | |
938 | 3 | 195.39.196.2 | 0 | 0 | 0 | 0.207369529163 | 20050703143510 | None | 2057 | 571 | 0 | wikitext | |
942 | 2 | Ashapochka | 0 | 0 | 1 | 0.301798192112 | 20130407223156 | None | 2061 | 128 | 0 | wikitext | |
... |
Вибір колонок
ред.Виведемо із таблиці page лише колонки, які нас цікавлять: page_namespace і page_title (Запит у Quarry)
SELECT
page_namespace, page_title
FROM
ukwikibooks_p.page
Несподівано ми отримали зовсім інші перші рядки:
page_namespace | page_title |
---|---|
0 | AutoIt |
0 | Be_able_to |
0 | Bison |
... | ... |
Чому так? Якщо не вказати явно порядок сортування, база даних чи інструмент для виконання запитів використовує певний порядок сортування за умовчанням.
У нашому випадку сортування відбулося за тими колонками, які мі запитували — page_namespace і page_title.
Сортування
ред.Ми можемо вказати сортування явно, додавши до запиту ORDER BY page_namespace, page_title
, і отримати такий самий результат (Запит у Quarry)
SELECT
page_namespace, page_title
FROM
ukwikibooks_p.page
ORDER BY
page_namespace, page_title
Тепер отримаємо такий же порядок сортування, як був у нас спочатку, коли ми отримували всі колонки. Для цього додамо сортування за колонкою page_id: ORDER BY page_id<> (Запит у Quarry)
SELECT
page_id, page_namespace, page_title
FROM
ukwikibooks_p.page
ORDER BY
page_id
Тепер результат відсортовано за page_id і перші рядки виглядають так:
page_id | page_namespace | page_title |
---|---|---|
1 | 0 | Main_Page |
2 | 0 | Головна_сторінка |
931 | 10 | Wikibrothers |
938 | 3 | 195.39.196.2 |
942 | 2 | Ashapochka |
... |
Простори назв
ред.Отже, що означають цифри 0, 2, 3, 4, 10, 14 у колонці page_namespace? Це коди, які відповідають різним просторам імен. У довідці з просторів імен є табличка із номерами стандартних просторів імен:
Індекс |
Назва |
Обговорення | ||
---|---|---|---|---|
0 | (Основний) | Обговорення | 1 | |
2 | Користувач | Обговорення користувача | 3 | |
4 | Вікіпідручник | Обговорення Вікіпідручника | 5 | |
6 | Файл | Обговорення файлу | 7 | |
8 | MediaWiki | Обговорення MediaWiki | 9 | |
10 | Шаблон | Обговорення шаблону | 11 | |
12 | Довідка | Обговорення довідки | 13 | |
14 | Категорія | Обговорення категорії | 15 | |
-1 | Спеціальна | N/A | ||
Медіа | Media |
У Вікірозмітці можна вивести префікс простору назв із допомогою магічного слова {{ns}}:
Простори імен для статей | Простори імен для сторінок обговорення | |||
---|---|---|---|---|
Використання | Результат | Використання | Результат | |
{{ns:-2}} / {{ns:Media}}
|
Медіа | {{ns:-1}} / {{ns:Special}}
|
Спеціальна (no talk page) | |
{{ns:0}} / {{ns:}}
|
{{ns:1}} / {{ns:Talk}}
|
Обговорення | ||
{{ns:2}} / {{ns:User}}
|
Користувач | {{ns:3}} / {{ns:User talk}}
|
Обговорення користувача | |
{{ns:4}} / {{ns:Project}}
|
Вікіпідручник Varies between wikis |
{{ns:5}} / {{ns:Project talk}}
|
Обговорення Вікіпідручника | |
{{ns:6}} / {{ns:File}} or {{ns:Image}}
|
Файл | {{ns:7}} / {{ns:File talk}} or {{ns:Image talk}}
|
Обговорення файлу | |
{{ns:8}} / {{ns:MediaWiki}}
|
MediaWiki | {{ns:9}} / {{ns:MediaWiki talk}}
|
Обговорення MediaWiki | |
{{ns:10}} / {{ns:Template}}
|
Шаблон | {{ns:11}} / {{ns:Template talk}}
|
Обговорення шаблону | |
{{ns:12}} / {{ns:Help}}
|
Довідка | {{ns:13}} / {{ns:Help talk}}
|
Обговорення довідки | |
{{ns:14}} / {{ns:Category}}
|
Категорія | {{ns:15}} / {{ns:Category talk}}
|
Обговорення категорії |
Список сторінок із вікіпосиланням
ред.SQL Функція CONCAT об’єднує в один рядок значення своїх параметрів
Наприклад
CONCAT('[[', page_title, ']]')
поверне рядок який складається із двох квадратних дужок, які відкриваються, значення колонки page_title та дві квадратні дужки, які закриваються, що разом дасть вікірозмітку для посилання на сторінку з назвою page_title
Додамо умову, що вибираємо лише сторінки із основного простору (простору статей)
WHERE page_namespace = 0
і виведемо вікірозмітку посилання на статті (код у Quarry)
SELECT
CONCAT('[[', page_title, ']]') AS page_link
FROM
ukwikibooks_p.page
WHERE
page_namespace = 0
Результат:
page_link |
---|
AutoIt |
Be_able_to |
Bison |
... |
Список сторінок із посиланням, що включає префікс простору назв
ред.Аналогічно ми можемо вивести список сторінок, що містить повне посилання на сторінку, яке включає і префікс простору назв (код у Quarry)
SELECT
page_id,
page_namespace,
page_title,
CONCAT(
'[[:{{ns:', page_namespace, '}}:', page_title, ']]'
) AS page_link
FROM
ukwikibooks_p.page
ORDER BY
page_id
Результат:
page_id | page_namespace | page_title | page_link |
---|---|---|---|
1 | 0 | Main_Page | [[::Main_Page]] |
2 | 0 | Головна_сторінка | [[::Головна_сторінка]] |
931 | 10 | Wikibrothers | Шаблон:Wikibrothers |
938 | 3 | 195.39.196.2 | Обговорення користувача:195.39.196.2 |
942 | 2 | Ashapochka | Користувач:Ashapochka |
972 | 3 | Cl | Обговорення користувача:Cl |
991 | 2 | Ilya | Користувач:Ilya |
1467 | 14 | Головна | Категорія:Головна |
1495 | 2 | Albedo | Користувач:Albedo |
1549 | 4 | Портал_спільноти | Вікіпідручник:Портал_спільноти |
1557 | 2 | Zigger | Користувач:Zigger |
1558 | 3 | Zigger | Обговорення користувача:Zigger |
1578 | 3 | Gangleri | Обговорення користувача:Gangleri |
1579 | 2 | Gangleri | Користувач:Gangleri |
1659 | 14 | Українська_мова | Категорія:Українська_мова |