Accès rapide : Aller au contenu de l'article |  Aller au menu |  Liste complète des articles  |  Aide  |  Contact |
bandeau

Accueil > Aides pour les nuls > spip-basique > Base de données MySQL , requêtes SQL, avec SPIP

Base de données MySQL , requêtes SQL, avec SPIP

Attention, ce sont là des découvertes personnelles. Mais il paraît que c’est très dangereux de faire cela, d’après le forum spip. A éviter, donc. On peut trouver en français une documentation sur Mysql

FTP : installation et usage

Voici quelques explications

 Sauvegarde de la base de données

Avec la version 1.9 de SPIP, c’est tout simple.
– entrer dans l’espace privé, c’est à dire : http://www.journal-la-mee.fr/ecrire
– cliquer sur l’icône configuration
– puis sur « maintenance du site »
– puis sur sauvegarder/restaurer la base
– puis sur sauvegarde compressée

et ça se fait tout seul !

On a alors le message : "La base a été sauvegardée dans tmp/dump/Accueil..(date)xml.gz (7 467 751 octets). Les fichiers sauvegardés sont :

* spip_articles
* spip_auteurs
* spip_auteurs_articles
* spip_auteurs_messages
* spip_auteurs_rubriques
* spip_breves
* spip_documents
* spip_documents_articles
* spip_documents_breves
* spip_documents_rubriques
* spip_forum
* spip_groupes_mots
* spip_messages
 
* spip_meta
* spip_mots
* spip_mots_articles
* spip_mots_breves
* spip_mots_documents
* spip_mots_forum
* spip_mots_rubriques
* spip_mots_syndic
* spip_petitions
* spip_rubriques
* spip_signatures
* spip_syndic
* spip_syndic_articles
* spip_types_documents

 Spip_articles

Il s’agit de la base de données.
Ouvrir cette base à l’aide de son adresse http://.....
etc. Il est souvent demandé l’identifiant (login) et le mot de passe.

BDD3
Quand la base est ouverte on voit, à gauche, une colonne étroite.
On y trouve, en haut, l’identifiant (login)
Et juste en dessous : spip-articles

– Cliquer sur spip-articles
– Puis à droite sur « afficher »
– On voit alors apparaître la liste de tous les articles du site.

BDD4

– On peut donc modifier : le numéro de l’article, la date, la rubrique où il est classé, etc.

BDD5

– Faire ensuite « exécuter » (bas de page).

On peut, de même, modifier spip-rubriques


 Intervenir sur un article précis

Cliquer à gauche sur la table spip_articles

Puis, en haut sur : sélectionner

et, dans le tableau qui se présente, indiquer le numéro de l’article


 Ajouter des pages

Sans doute suis-je idiote, mais j’aime avoir des articles dans l’ordre. Mais j’arrive à un blocage. Imaginons que j’aie les pages :

5001
5002
5003
5004
5005
etc

Je voudrais faire une suite à l’article 5001, mais je n’ai pas envie que cette suite se trouve à la page 5006.

Alors je vais créer les pages :

(5001)
      50010
      50011
      50012   etc

Pour faire cela :

BDD1
BDD2

1) ouvrir la base de données grâce à son adresse : http://...

2) à gauche on voit une colonne où il y a marqué, en haut, « spip_articles ». Cliquer sur « spip_articles »

puis, à droite, sur l’onglet bleu « insérer »

Il s’ouvre alors un tableau.
Dans la ligne id_article, en dessous de « valeur », mettre le n° de page qu’on veut. Par exemple 50010

Puis, en bas de page, cliquer sur « exécuter »
et recommencer pour toutes les pages qu’on veut créer.

Mais attention, il paraît que ce genre de manipulation est dangereux !


 Déplacer une photo

J’ai la photo 2260 qui se trouve dans l’article 5012
et je voudrais mettre cette photo dans l’article 1158

1) ouvrir la base de données grâce à son adresse : http://...

2) à gauche on voit une colonne où il y a marqué, en haut, « spip_documents_articles ». Cliquer sur « spip_documents_articles » (note : cela a pu changer, quelquefois il s’agit de spip_documents_liens, mais c’est la même manipulation)

BDD6

puis, à droite, sur l’onglet bleu « sélectionner »

3) Dans la fenêtre qui apparaît, compléter, en dessous de « valeur » :
– 2260 pour id_document
– 5012 pour id_article et cliquer sur « exécuter »

BDD7

4) dans la fenêtre qui s’ouvre on retrouve 2260 et 5012, cliquer sur « modifier »

BDD8

5) Dans la nouvelle fenêtre, modifier le numéro de l’article (au lieu de 5012, mettre 1158) et cliquer sur « exécuter » et c’est bon ! le document 2260 est passé de l’article 5012 à l’article 1158.

BDD9

 Voir ce que cela donne avec la table spip_documents_liens :

table spip_documents_l

En cliquant ensuite sur le petit crayon, on peut changer le document de place.


 Articles lus plus de 1000 fois

Cliquer à gauche sur la table spip_articles

puis, en haut sur : SQL

et, dans le rectangle blanc, écrire la requete SQL suivante :

SELECT* FROM `spip_articles`
WHERE VISITES>1000
BDD1

puis cliquer sur exécuter


 Voir la liste des documents

Cliquer à gauche sur la table spip_documents
puis, en haut sur : sélectionner

Cliquer alors sur :
– id_document
– fichier

cliquer ensuite sur : exécuter (en bas de page)

BDD2

On trouve alors la liste des articles (avec leur numéro et, à côté, les documents correspondants.

 A propos des visites

On trouve des explications ici http://www.koakidi.com/spip.php?article279


 Langage SQL, requêtes, insertion, mise à jour

C’est un peu dur au départ, mais on s’y fait.

Voici quelques requêtes SQL que j’ai glanées :

il faut d’abord
D’ABORD OUVRIR LA BASE DE DONNEES, cliquer par exemple (à gauche) sur spip_articles, puis, en haut sur le bouton SQL. Effacer ce qui y est déjà et y mettre ensuite l’une des requêtes ci-dessous
BDD-SQL

1.- Première requête :

SELECT `id_article` , `visites`
FROM `spip_articles`
WHERE 1
LIMIT 0, 30
 
Cela veut dire :
SELECTIONNER les colonnes `id_article` , `visites`
A PARTIR DE la table `spip_articles`
LORSQUE (=Where)il y a au moins un article
en affichant 30 réponses maxi

 

Quote-Quote... quodec !
Attention : c’est marqué `spip_articles` et pas ’spip_articles’ .

On utilise une quote c’est-à-dire ceci `
et pas une apostrophe !

Pour obtenir une quote il faut faire : AltGR+7 (le 7 qui est à la ligne supérieure du clavier, la quote se trouve à côté de .... è)

 

2.- Deuxième requête :

SELECT*
FROM `spip_articles`
WHERE VISITES>1000
 
Cela veut dire :
SELECTIONNER tous les articles (l’étoile veut dire .... tous)
A PARTIR DE la table `spip_articles`
WHERE (LORSQUE) les visites sont supérieures à 1000

Ca donne tout un tableau, pas commode à consulter. On peut donc restreindre les choix. Voir la troisième requête.

 

3.- Troisième requête :

SELECT `id_article` , `visites`
FROM `spip_articles`
WHERE VISITES > 3000
LIMIT 0 , 40
 
Cela veut dire :
SELECTIONNER les colonnes `id_article` , `visites`
A PARTIR DE la table `spip_articles`
WHERE (LORSQUE) les visites sont supérieures à 3000
En affichant 40 réponses maxi

 

4.- Quatrième requête :

SELECT `id_article` , `visites`
FROM `spip_articles`
WHERE id_RUBRIQUE = 12
LIMIT 0 , 20
 
Cela veut dire :
SELECTIONNER les colonnes `id_article` , `visites`
A PARTIR DE la table `spip_articles`
WHERE (=LORSQUE) le numéro de la rubrique est 12
En affichant 20 réponses maxi

 

5.- Cinquième requête :

UPDATE `spip_articles`
SET id_rubrique= 2
WHERE ID_ARTICLE IN(14, 27, 149)
 
Cela veut dire :
MODIFIER (=UPDATE) la table `spip_articles`
EN METTANT (=SET) la rubrique n° 2
WHERE (LORSQUE) les articles sont dans la liste (14, 27, 149)

Cette requête fait que les articles 14, 27 et 149 sont dans la rubrique 2

 

6.- Sixième requête, avec le signe % :

UPDATE `spip_articles`
SET id_rubrique= 3
WHERE titre LIKE `OGM%`
 
Cela veut dire :
MODIFIER (=UPDATE) la table `spip_articles`
EN METTANT (=SET) la rubrique n° 3
WHERE (LORSQUE)le titre commence par OGM

Cette requête fait que les articles dont le titre commence par OGM seront dans la rubrique 3

 

Si on avait écrit :
WHERE titre LIKE `%OGM%`
on aurait mis dans la rubrique 3 les articles dont le titre contient le mot OGM

 

Si on avait écrit :
WHERE titre LIKE `%OGM`
on aurait mis dans la rubrique 3 les articles dont le titre se termine par le mot OGM

7. Septième requête : remplacer un mot par un autre

Dans les post-scriptum (ps) de mon site, je voulais remplacer ...mee.info... par ...mee.fr/bp  

J’ai utilisé la requête suivante :

UPDATE `spip_articles`
SET `ps` = REPLACE (`ps` ,
’mee.info’,
’mee.fr/bp  ’)
where id_article in(511, 512, 513,514)

Ce qui veut dire :

Mettre à jour (update) la table spip_articles
en modifiant `ps`
il s’agit de remplacer, dans `ps`
’mee.info’
par ’mee.fr/bp  
lorsque (where) les articles sont dans la liste 511, 512, 513,514

 

8. Huitième requête : Mettre un titre à une photo

J’ai utilisé la requête suivante :

UPDATE `ma_base`.`spip_documents`
SET `titre` = ’Tornade’
WHERE `spip_documents`.`id_document` =105 ;

Ce qui veut dire :

Mettre à jour (update) dans ma_base, la table spip_documents
et mettre (SET) le titre « Tornade »
LORSQUE (where) le document porte le numéro

(bien entendu il faut remplacer ma_base par le nom exact de la base de données !)

9. Neuvième requête : rechercher les documents ayant un titre vide

J’ai utilisé la requête suivante

SELECT `id_document`
FROM `spip_documents`
WHERE ’titre’ = «  »

Ce qui veut dire :

Rechercher (SELECT) les documents
A PARTIR DE (From) la table `jour4hi_journal`.spip_documents
LORSQUE (where) le titre est vide

10. Dixième requête : changer les dates

1) Modifier toutes les dates de publication des articles en une seule opération :

UPDATE `spip_articles` SET date=CURRENT_TIMESTAMP

2) Modifier toutes les dates de modification des articles en une seule opération :

UPDATE `spip_articles` SET date_modif=CURRENT_TIMESTAMP

Mettre un titre, suite

Le problème : j’avais 1800 documents sans titre, dans la table `jour4hi_journal`.spip_documents, et je voulais, pour chacun, mettre comme titre le contenu de la colonne ’fichier’.

Voici la requête SQL :

UPDATE ’spip_documents’
SET ’titre’=’fichier’
WHERE ’titre’=«  »

Ce qui veut dire :

Mettre à jour (UPDATE) la table ’spip_documents’
en mettant ’titre’=’fichier’
Lorsque le titre est vide

Supprimer des caractères

Le problème : dans la table spip_documents, dans la colonne `titre`, j’avais des expressions du genre jpg/ma-photo.jpg et je voulais supprimer jpg/ et supprimer aussi .jpg

pour supprimer jpg/ j’ai écrit la requête suivante

UPDATE `spip_documents`
SET `titre`=SUBSTR(titre,5)
WHERE `titre` LIKE ’jpg/%’

Ce qui veut dire :

Mettre à jour la table `spip_documents`
en substituant au titre, un titre commençant au 5e caractère
lorsque le titre est du genre jpg/%

pour supprimer .jpg j’ai écrit la requête suivante :

UPDATE `spip_documents`
SET `titre`= SUBSTR(titre, 1, length(titre)-4)
WHERE titre LIKE `%.jpg`

Ce qui veut dire :

Mettre à jour la table `spip_documents`
en substituant au titre, un titre de longueur diminuée de 4
lorsque le titre est du genre %.jpg

length(titre) : c’est la longueur du titre
le 1 indique la position de départ
le 4 indique qu’il y a 4 caractères à supprimer

10. Insertions, insertions multiples

Dans la colonne id_article, j’ai besoin d’ajouter les valeurs 22, 23 et 24. Voici la commande :

INSERT `jour4hi_journal`.spip_articles(id_article)
SELECT 22
union
SELECT 23
UNION
SELECT 24

Cela veut dire :
insérer, dans la table `jour4hi_journal`.spip_articles, à la colonne id_article
les valeurs 22,23,24

Ceci m’a permis de faire des changements très rapides sur une soixantaine d’articles .

Ne pas oublier ...

  • Dans tous les cas, ne pas oublier de cliquer sur le bouton EXECUTER qui se trouve en dessous de la boite
  • Ne pas oublier non plus de mettre des quotes et pas des apostrophes
  • Attention à ne pas oublier le signe =, les parenthèses, etc.

On trouve des explications simples sur les fonctions SELECT, FROM, UPDATE, SET, ici : http://www.zone-webmasters.net/requetes-sql.php

et il y a des choses plus compliquées ici :

http://www.phpcs.com/tutorial.aspx?ID=491

ou celui ci : http://www.phpsecure.info/v2/article/InjSql.php

ou celui-ci en français


 Les balises de la base de données

Voir l’article


NOTES:

SQL : des explications en français - http://sqlpro.developpez.com/