Réalisation de sites web

Sommaire du site

Présentation
Comment apprendre
L'équipement
La page web
  Styles et CSS
  HTML, structure de la page
  HTML, éléments du corps
Le langage JavaScript
  JavaScript, objets "core"
  JavaScript, DOM, les bases
  JavaScript, DOM, node
  JavaScript, compléments
Le langage PHP, les bases
  PHP, fonctions utiles
  PHP pour le web
  PHP, compléments
SQL, introduction
  MySQL et PHP pour le web
  MySQL, plus loin...
Applications AJAX
Annexes utiles
  Fichier .htaccess
  Sécurité des sites web
  Conception d'un site web
  Référencement, syndication

Sommaire détaillé

Mentions légales.

Chapitres de cette page
Contenu  -> 

Page mise à jour le : 12-08-2015

Haut de la page

Opérateurs et fonctions
Compléments sur les clauses
Requêtes sur plusieurs tables
A suivre...

MySQL, plus loin...

Cette page présente des fonctionnalités plus avancées de MySQL. Toutefois, il est évident que tout ne sera pas vu ici. Les lecteurs voulant approfondir le sujet pourront consulter utilement le site de référence :
http://dev.mysql.com/doc/refman/5.0/fr/index.html

Ou se reporter aux ouvrages spécialisés sur SQL et MySQL

Par ailleurs, afin d'illustrer quelques unes des informations données ici, une page d'exemples de requêtes (nouvelle fenêtre / nouvel onglet) est proposée sur ce site.

Opérateurs et fonctions

Bien que SQL ne soit pas un véritable langage de programmation, il dispose d'opérateurs et de fonctions. Ceux-ci sont utiles pour les sélections d'enregistrements dans la clause WHERE mais aussi, parfois, lors de l'insertion de données ou dans le cas de requêtes complexes.

On a déjà vu dans cette clause :
WHERE `date_cotisation` < NOW() - INTERVAL 1 YEAR

où l'on trouve l'opérateur de comparaison '<', la fonction 'NOW()' qui renvoie la date actuelle et l'opérateur INTERVAL qui, s'appliquant à une valeur de type "date", renvoie une autre valeur du même type.

Il existe une fonction INTERVAL qui s'applique aux nombres et qui sert à trouver la position d'un nombre dans une liste ordonnée :
INTERVAL(12, 0, 5, 10, 15, 20) renvoie 3 car 12 est compris entre 10 (3° élément de la liste et 15.

Nous allons voir quelques autres opérateurs et fonctions utiles.

Arithmétiques

On a les classiques opérations +, -, *, /
ainsi que <, >, =, >=, <=, != pour les comparaisons et
AND, OR, NOT pour associer les valeurs logiques.

Pour les fonctions, voici les plus utiles, elles sont utilisées essentiellement dans les regroupements (voir le paragraphe suivant) :

MAX(col) renvoie la plus grande des valeurs obtenues d'une colonne.

MIN(col) renvoie la plus petite des valeurs obtenues d'une colonne.

Le résultat de ces deux fonctions peut aussi être obtenu en classant une colonne et en ne prenant que son premier élément.

SUM(col) renvoie la somme des valeurs obtenues d'une colonne.

AVG(col) renvoie la moyenne des valeurs obtenues d'une colonne.

COUNT(*) donne le nombre d'éléments.

Sur les chaînes

LIKE 'motif' est utilisé pour trouver une chaîne correspondant à 'motif' dans lequel on peut utiliser :

_ pour remplacer exactement un caractère,

% pour remplacer un nombre quelconque de caractère, y compris aucun.

Par exemple :

SELECT `nom` FROM `adherents` WHERE `fonction`LIKE 'adh_rent%'

trouvera les nom des personnes qui ont comme fonction : 'adhérent', 'adherent', 'adhérente', 'adherente' voire 'adhérents', 'adhérentes'...

MD5(chaine)
SHA1(chaine) // à partir de MySQL 4.02

Ces deux fonctions renvoient la valeur de hachage de la chaîne passée en paramètre.

Elles sont principalement utilisées dans les cas de gestion de mots de passe car ces codages ne sont pas réversibles.

MD5 renvoie une chaîne représentant un nombre hexadécimal de 32 caractères alors pour que SHA1 ce sera sur 40 caractères. L'algorithme SHA1 a la réputation d'être plus sûr que MD5.

Exemple, test du mot de passe d'un utilisateur dont on connait l'ID.

$requete= "SELECT id FROM `utilisateurs`

    WHERE `id` = $id AND `passe` = SHA1($mot_de_passe)";

$id_req= mysql_query($requete);

 

if (mysql_num_rows($id_req) == 0)

  exit("Erreur");

 

Quelques compléments sur les clauses pour SELECT

Limitation du nombre de résultats

On a déjà aperçu la clause LIMIT. Elle peut prendre un ou deux arguments :

LIMIT n
LIMIT p, n
Dans le premier cas les 'n' premiers enregistrements seront produits.
Dans le second, les 'n' enregistrements à partir du rang 'p'+1 seront produits.

Classement

ORDER BY col

SELECT renverra les résultats dans l'ordre de classement (ascendant) de la colonne 'col'.

Il est possible de spécifier plusieurs colonnes :
ORDER BY `nom', `prenom`.

L'ordre descendant est obtenu en suffixant par :
DESC : ORDER BY `age` DESC, `nom`.

Regroupement

Si des valeurs sont identiques dans une colonne, on peut les regrouper pour limiter le nombre de résultats avec la clause :
GROUP BY col

Exemple :

SELECT `classe`, COUNT(*) FROM 'liste' GROUP BY `classe`

Regroupe tous les enregistrements de 'liste' qui on la même valeur dans la colonne 'classe' et affiche pour chacun 'classe' et le nombre d'enregistrements de cette 'classe'.

Requêtes sur plusieurs tables

Jointures

Si des valeurs à obtenir se trouvent dans plusieurs tables ayant des relations entre elles, on peut les trouver avec une seule requête SELECT. Il suffit d'indiquer les tables derrière FROM et de spécifier la relation avec WHERE.

Imaginons qu'une bibliothèque ait une liste de personnes (emprunteurs) et une liste d'ouvrages. Un ouvrage ne peut être prêté qu'à un emprunteur à la fois.

Table 'personnes' :
id nom
 

 

Table 'ouvrages' :
id titre auteur emprunteur
 

Ici, 'emprunteur' contient 'id' de la personne ayant emprunté.

On veut obtenir la liste des ouvrages empruntés et par qui.

SELECT titre, auteur, nom FROM personnes, ouvrages
    WHERE personnes.id = emprunteur

On remarque que dans la clause WHERE on a 'personne.id' car le nom de colonne 'id' est utilisé dans les deux tables.

Naturellement les jointures ne se limitent pas à deux tables. Notre premier exemple d'adhérents participant à des activités contient trois tables. Si l'on veut connaitre les activités pratiquées par chacun, la jointure sera faite sur ces trois tables.

Voir l'interrogation : "Adhérent <-> Activités" sur la page de démonstration (nouvelle fenêtre / nouvel onglet).

Il existe des jointures plus élaborées qui utilisent l'opérateur JOIN.

Cela est présenté sur le site de référence :
http://dev.mysql.com/doc/refman/5.0/fr/join.html

Voir aussi (et c'est plus développé) :
http://sqlpro.developpez.com/cours/sqlaz/jointures/

 

SELECT dans SELECT

Le résultat d'une requête SELECT peut être utilisé dans une autre.

C'est surtout intéressant pour fournir une valeur à une clause WHERE.

Voir la dernière interrogation : "Adhérent qui fait le plus d'activités" sur la page de démonstration (nouvelle fenêtre / nouvel onglet).

A suivre...

Après avoir vu HTML, JavaScript, PHP et SQL, une synthèse serait utile.

L'occasion en est donnée en voyant le type d'application AJAX qui autorise la réalisation de pages interactives grâce à la communication en "temps réel" avec un serveur.

AJAX