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 Українська_мова Категорія:Українська_мова