Azt a kérést kaptam tegnap, hogy a régi Ubuntu Wiki tartalmát keressem elő. Mivel a weboldal nem működik, így az adatbázisból próbáltam kibányászni. Szerencsére ez nem olyan bonyolult, de épp annyira az, hogy megéri leírni 😄 Három részfeladatot kellett megoldanom:
- Legfrissebb laptartalmak összeszedése egy lekérdezésbe,
- Adatok exportálása olyan helyre, ahová írhat az adatbázis,
- Adatok exportálása olyan formában, hogy a LibreOffice könnyedén megnyissa.
Az első részt ezen Stack Overflow bejegyzés alapján oldottam meg, működése elég kézenfekvő, viszont ha nem ismeri az ember az adatbázistáblák tartalmát, akkor nagy segítség 🙂 Maga a lekérdezés a következő:
SELECT page_title, old_text
FROM revision, page, text
WHERE revision.rev_id = page.page_latest AND text.old_id=revision.rev_text_id;
Második feladat az adatok kiírása, amely elég egyszerű: SELECT [...] INTO OUTFILE 'kimenet.csv'
. Igen ám, de az adatbázis csak egy adott mappába írhat, meg kell keresni, hogy az melyik. Ehhez ki kell olvasni a következő globális beállítást:
SHOW VARIABLES LIKE 'secure_file_priv';
Így meg is van a megfelelő lekérdezésrész:
INTO OUTFILE '/var/lib/mysql-files/export.csv'
Végül a LibreOffice-nak jobban megfelelő formátumra állítjuk a fájlt:
- a mezőket vesszővel választjuk el,
- a mezőket idézőjelek közé tesszük,
- a mezők tartalmáben lévő időzőjeket megkettőzzük,
- a sorok végére újsor karakter kerül.
Tehát így áll össze a teljes lekérdezés:
SELECT page_title, old_text
INTO OUTFILE '/var/lib/mysql-files/export.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
FROM revision, page, text
WHERE revision.rev_id = page.page_latest AND text.old_id = revision.rev_text_id;
Sajnos egyes mezők tartalma olyan hosszú, hogy ezt a LibreOffice már nem kezeli, ezeknél a további kézi feldolgozás nem kerülhető el. Viszont a nagyja szépen előállt egy táblázatban, amelyben az 1. oszlopban szerepel a szócikk címe, a 2. oszlopban pedig a WikiSzöveg.