Wiktionnaire:Requêtes SQL
La base de données de Wiktionnaire utilise MySQL. Elle peut être interrogée au moyen de requêtes SQL pour obtenir, par exemple, une liste d'articles vérifiant certains critères telle que la liste des articles pointant sur Physique. Les requêtes simples les plus utiles sont programmées dans le logiciel MediaWiki et sont accessibles sur Special:Specialpages.
Les admins peuvent parfois lancer des requêtes SQL en ligne. Si ce lien fonctionne, les admins peuvent lancer les requêtes sur la page special:Asksql.
Si les requêtes fonctionnent, soyez prudents ! Les requêtes complexes peuvent ralentir sévèrement le serveur. Les requêtes expirent automatiquement après 30 secondes.
Certains développeurs peuvent lancer des requêtes sur la base de donnée en ligne. Vous pouvez déposer une demande pour cela sur m:Requests for queries.
Le meilleur moyen pour effectuer des requêtes complexes ou contourner les limitations imposées par MediaWiki (telles que la limitation du nombre de résultats de "pages liées" à 500) est de télécharger la base de données et de lancer les requêtes sur votre copie locale. Des dumps de la base sont effectués plus ou moins régulièrement et sont accessibles ici.
Voir aussi :
[modifier] Instructions pour effectuer des requêtes MySQL sur votre ordinateur (Windows)
Ce processus devrait prendre moins d'une heure avec une connection haut-débit.
- Téléchargez le dump de la ou des bases de données dont vous avez besoin sur Wiktionnaire francophone, Wiktionnaires ou Tous les projets
- Pendant le téléchargement, téléchargez également MySQL sur MySQL.com
- Installez MySQL. (il n'est normalement pas nécessaire de redémarrer)
- Lancez le client MySQL (MySQL Command Line Client)
- Tapez CREATE wikipedia
- Tapez USE wikipedia
- La base de donnée devrait être prête, décompressez la et tapez SOURCE C:\Database Location\cur_fr_whatever.sql.
- Vous pouvez maintenant saisir quelques requêtes d'exemple de cette page. Tapez simplement la première ligne de la requête après l'entête mysql>, tapez entrée, et tapez la ligne suivante. La dernière ligne doit être terminée par un point-virgule. Gardez à l'esprit que, comme dans l'exemple suivant, le noms des champs et le nom de la base de donnée peuvent être différent de l'exemple. Si vous avez nommez votre base wikipedia alors ce qui suit doit fonctionner.
Exemple: (sample output)
mysql> SELECT c.cur_title FROM wikipedia.cur c
-> WHERE c.cur_text LIKE "%directory.google.com%";
- Il est aussi recommandé d'installer le navigateur de requêtes de MySQL, qui utilise une agréable interface pour les requêtes MySQL. pout l'utiliser, démarrez votre serveur MySQL sur la ligne de commande puis lancé ce programme par dessus. Parmi les options présentées, vous n'avez besoin que de taper l'adresse du serveur dans « localhost » et d'appuyer sur entrée.
[modifier] Modifieurs
Pour limiter le nombre de résultats :
- "SELECT ... LIMIT 20".
Vous pouvez aussi ajouter une origine :
- "SELECT ... LIMIT 100, 20" affichera les 20 pages à partir de la cent-unième.
[modifier] Recherche des pages protégées
SELECT cur_title,cur_restrictions,cur_namespace from cur where cur_restrictions!=
[modifier] Recherche des pages contenues dans l'espace méta
select cur_title from cur where cur_namespace=4 order by cur_title LIMIT 100
[modifier] Recherche des pages de discussion orphelines
SELECT cur_title FROM cur GROUP BY cur_title HAVING MIN(cur_namespace)=1
[modifier] Recherche d'une redirection
SELECT cur_title FROM cur WHERE cur_is_redirect=1 LIMIT 99
[modifier] Rechercher les pages qui ne sont pas liés à un autre Wikipedia
(pour l'anglais) :
SELECT cur_title FROM cur WHERE cur_text NOT LIKE "%[[en:%" AND cur_namespace=0 AND cur_is_redirect=0
[modifier] Recherche des pages les plus demandées
SELECT bl_to, COUNT( DISTINCT bl_from ) as nlinks FROM brokenlinks GROUP BY bl_to HAVING nlinks > 3 ORDER BY nlinks DESC LIMIT 0, 100
[modifier] Recherche des nouveaux utilisateurs
SELECT user_name, COUNT(*) FROM user, cur WHERE user_id=cur_user GROUP BY user_id ORDER BY user_id DESC LIMIT 10,20
[modifier] Recherche les pages dont aucun mot de paragraphe d'introduction n'est en gras
SELECT cur_title
FROM cur
WHERE cur_namespace=0
AND cur_is_redirect=0
AND cur_text NOT LIKE "%'''%"
AND cur_text NOT LIKE "%<b>%"
AND cur_text NOT LIKE "%disambiguation%"
AND cur_text NOT LIKE "%list%"
AND cur_title NOT LIKE "1%" LIMIT 200,150 ;
[modifier] Recherche les redirects cassés
SELECT cur_title, cur_namespace FROM cur,brokenlinks WHERE cur_id=bl_from AND cur_is_redirect=1 LIMIT 100
[modifier] Liste de toutes les pages méta
List of all pages (names of pages) included in the meta space, which have been created after a certain date
- pour les derniers jours
SELECT rc_timestamp,rc_namespace,rc_title FROM recentchanges WHERE rc_new=1 AND rc_minor=0 AND rc_namespace=4
- To find the creation date of a page you need to look in the 'old' table for the oldest edit for that page (if, that is, it's been edited more than once!) So we try to find the newest oldest edits.... WARNING: THIS MAY BE RATHER SLOW:
SELECT min(old_timestamp),old_namespace,old_title as creation FROM old WHERE old_namespace=4 GROUP BY old_title ORDER BY creation desc
- Those that have only been edited once are easier to pick out, because the cur table specially marks edits that are new:
SELECT cur_timestamp as creation,cur_namespace,cur_title FROM cur WHERE cur_namespace=4 AND cur_is_new=1 AND cur_is_redirect=0 ORDER BY creation desc
[modifier] Liste de toutes les pages du Wiktionnaire qui contiennent un certain texte
SELECT cur_namespace,cur_title
FROM searchindex,cur
WHERE si_page=cur_id AND MATCH(si_text) AGAINST('"certain texte"' IN BOOLEAN MODE)
Plus lent:
SELECT cur_namespace,cur_title FROM cur WHERE cur_text LIKE '%certain texte%'
[modifier] Statistiques
- Pour calculer les stats, on peut se servir d'un programme bot.
[modifier] Tous les editions (top) cette semaine, par ordre alphabétique.
(Changer le 'timestamp' suivant la date recherchée.)
SELECT cur_user_text, COUNT(*) AS count FROM cur WHERE cur_timestamp > '20030209000000' AND cur_timestamp < '20030218000000'AND cur_user != 0 GROUP BY cur_user ORDER BY cur_user_text
[modifier] Les utilisateurs les plus actifs :
SELECT cur_user_text, COUNT(*) AS count FROM cur WHERE cur_timestamp > '20030209000000' AND cur_timestamp < '20030218000000' AND cur_user != 0 GROUP BY cur_user ORDER BY count DESC LIMIT 20
en total:
SELECT cur_user_text, COUNT(*) AS count FROM cur WHERE cur_user != 0 GROUP BY cur_user ORDER BY count DESC LIMIT 100
sur RC:
SELECT rc_user_text, COUNT(*) AS count FROM `recentchanges` WHERE rc_user !=0 GROUP BY rc_user_text ORDER BY count DESC LIMIT 100
[modifier] Édition
SELECT rc_user_text, COUNT(*) AS count
FROM `recentchanges`
WHERE rc_user !=0
AND rc_timestamp > '20030209000000'
AND rc_timestamp < '20030218000000'
GROUP BY rc_user_text
ORDER BY rc_user_text LIMIT 999
[modifier] Recherche des pages des anciennes phases
(Ryo)
SELECT cur_title, cur_namespace, cur_is_redirect FROM cur WHERE cur_title like 'Wikipedia-%' limit 50
[modifier] Articles contenant un lien vers un redirect
donc potentiellement à corriger (Ryo):
SELECT ca.cur_title, cb.cur_title AS lien
FROM links, cur AS ca, cur AS cb
WHERE cb.cur_is_redirect = 1
AND l_to = cb.cur_id
AND l_from = ca.cur_title
AND ca.cur_namespace = 0 LIMIT 20
[modifier] Articles les plus liés
SELECT cur_title, COUNT(*) AS cnt
FROM cur, links
WHERE links.l_to = cur.cur_id
AND cur_namespace = 0
GROUP BY links.l_to
ORDER BY cnt DESC
LIMIT 100
[modifier] Images d'un utilisateur
SELECT img_size, img_name, img_description, img_timestamp FROM image WHERE img_user_text = 'Pierre Dupont' ORDER BY img_timestamp DESC LIMIT 1000
[modifier] Redirect ayant au moins une page qui pointe sur eux
SELECT cur_title, cur_namespace, count( l_from ) FROM cur left join links on l_to = cur_id WHERE cur_is_redirect = 1 GROUP BY cur_title, cur_namespace HAVING count( l_from ) > 0 LIMIT 100