Hébergement du site en PHP et Mysql par WDMédia-hébergement
Vous aussi adpotez les éléPHPants de Vincent Pontier !  
CONCOURS
 
 
PLUS DE PHP
 
 
PLUS DE JAVASCRIPT
 
COMMENT CA MARCHE
 
 
EXPLIQUE-MOI
 
 
NEWS LETTER
 

 
PARTENAIRES
 
Découvrez scriptsphp.org
Découvrez phpteam.net
Tout sur les expressions régulières
IE sucks :-)
 
DESIGN DU SITE
 
SQL/MySQL (Where)
Tuto écrit par Netsliver et Flyingcow, revu en août 2004 par Molokai et Raf

Comme tous les cours se suivent mais ne se ressemblent pas, nous allons ici comprendre les mécanismes du WHERE et ses possibilités grâce à un exemple comprenant deux tables (nous verrons par la suite pourquoi), une table Livres et une table Genres.
Tout d'abord il faut savoir que le mot clé WHERE peut être utilisé dans les requêtes SELECT, DELETE et UPDATE (son utilisation est cumulative grâce au AND ou OR) mais pas dans le INSERT car on ne peut pas insérer à un endroit précis de la table, l'insertion se fait toujours à la fin.
Ce cours ne sera basé que sur l'instruction SELECT.

Livres

IDLivre Prix Titre CodeGenre
1 40 Le glaive magique BD
3 40 Gaffes en gros BD
4 40 Lagaffe nous gâte BD
5 45 QRN sur Bretzelburg BD
6 80 Tour de manège RG
7 45 Le spectre aux balles d'or BD
8 30 La bonne chanson Po
9 50 La jeune Parque Po
10 50 Michel Strogoff Ro
11 50 La Serpe d'or BD
12 70 Toujours aimer RG
13 70 Toujours aimante RG
14 72 Toujours aimé RG

Genres

CodeGenre LibelleGenre
BD Bande Dessinée
Po Poésie
RG Roman de gare
Ro Roman
SF Science Fiction

1 - Sélection directe par l'ID ou le code
Ce cas vous permet de faire une sélection par exemple sur un livre dont vous connaissez le numéro, imaginons si vous faites un répertoire de tous les livres donc avec une instruction de sélection, lorsque le visiteur clique sur le titre de l'un des livres par exemple "Le spectre aux balles d'or", le détail de celui-ci apparaît.
SELECT * FROM Livres WHERE IDLivre = 7;
Cette sélection va vous permettre d'avoir les informations concernant le livre :

Livres

IDLivre Prix Titre CodeGenre
7 45 Le spectre aux balles d'or BD
SELECT * FROM Livres WHERE IDLivre = 7 OR IDLivre = 8;
Bien sûr ce genre de sélection ne s'applique pas seulement sur les identifiants des tables.
Attention : il faut bien choisir entre le AND et le OR lorsque vous voulez faire des sélections multiples, par exemple ici le OR permet de sélectionner deux fois sur le même champ, le AND est utilisé lorsque vous faites une sélection sur différent champ de la table.
SELECT * FROM Livres WHERE IDLivre = 7 AND Prix > 50;
La sélection dans cette requête prend le livre avec l'ID égal à 7 et d'un prix supérieur à 50. Donc aucun enregistrement ne sera retourné par la requête puisque le livre 7 coûte 45F.
SELECT * FROM Livres WHERE IDLivre = 7 OR Prix > 50;
Ici le livre 7 et tous les autres livres d'un prix supérieur à 50F sont sélectionnés.

2 - Le mot clé LIKE
Le mot clé LIKE avec le WHERE va vous permettre de faire une sélection "approximative" dans vos tables, par exemple ici vous voulez tous les livres dont le titre commence par 'tou'.
SELECT * FROM Livres WHERE Titre LIKE 'tou%';

Livres

IDLivre Prix Titre CodeGenre
6 80 Tour de manège RG
12 70 Toujours aimer RG
13 70 Toujours aimante RG
14 72 Toujours aimé RG
SELECT * FROM Livres WHERE CodeGenre LIKE 'r_';

Livres

IDLivre Prix Titre CodeGenre
6 80 Tour de manège RG
10 50 Michel Strogoff Ro
12 70 Toujours aimer RG
13 70 Toujours aimante RG
14 72 Toujours aimé RG

Pour remplacer un seul caractère dans un LIKE il faut utiliser _, pour remplacer une chaîne de caractère il faut utiliser %.
Le LIKE ne respecte pas la casse (minuscule - majuscule) contrairement au égal.

3 - Sélection selon une liste de valeur
Ici nous allons voir un mot clé permettant de faire la sélection à partir d'une liste de valeur. Le WHERE est ici utilisé avec un IN.
SELECT * FROM Livres WHERE Prix IN (40, 50, 72);
Le mot clé IN permet de sélectionner les enregistrements dans la table Livres où le prix est de 40, 50 ou 72.

Livres

IDLivre Prix Titre CodeGenre
1 40 Le glaive magique BD
3 40 Gaffes en gros BD
4 40 Lagaffe nous gâte BD
9 50 La jeune Parque Po
10 50 Michel Strogoff Ro
11 50 La Serpe d'or BD
14 72 Toujours aimé RG

De la même façon il y a le mot clé contraire au IN qui est le NOT IN qui va en fait sélectionner les enregistrements qui n'ont pas l'une des valeurs indiquées sur le champ demandé.
SELECT * FROM Livres WHERE Prix NOT IN (40, 50, 72);
Cette requête sélectionne donc les livres qui ne valent pas 40, 50 ou 72F.

4 - Sélection selon une plage de valeurs
Nous allons lier dans cette partie le WHERE au BETWEEN...AND qui permet de faire une sélection en précisant une plage de données, ce mot clé n'est utilisé qu'avec des valeurs "numériques" (integer, date...).
SELECT * FROM Livres WHERE Prix BETWEEN 40 AND 50;

Livres

IDLivre Prix Titre CodeGenre
1 40 Le glaive magique BD
3 40 Gaffes en gros BD
4 40 Lagaffe nous gâte BD
5 45 QRN sur Bretzelburg BD
7 45 Le spectre aux balles d'or BD
9 50 La jeune Parque Po
10 50 Michel Strogoff Ro
11 50 La Serpe d'or BD

S'il on veut par exemple avoir toutes les BD qui ont un prix entre 40 et 50F la requête est la suivante :
SELECT * FROM Livres WHERE (Prix BETWEEN 40 AND 50) AND (CodeGenre = 'BD');
Les parenthèses ne sont bien sûr pas obligatoires mais c'est pour une question de clarté.

5 - Jointures
Ce système permet de joindre deux tables différentes qui ont un champ en relation, ici la table Livres et la table Genres ont le champ CodeGenre en commun, ces deux tables peuvent donc être jointes grâce au WHERE.
SELECT * FROM Livres, Genres WHERE Livres.CodeGenre = Genres.CodeGenre;
IDLivre Prix Titre Livres.CodeGenre Genres.CodeGenre LibelleGenre
1 40 Le glaive magique BD BD Bande Dessinée
3 40 Gaffes en gros BD BD Bande Dessinée
4 40 Lagaffe nous gâte BD BD Bande Dessinée
5 45 QRN sur Bretzelburg BD BD Bande Dessinée
6 80 Tour de manège RG RG Roman de gare
7 45 Le spectre aux balles d'or BD BD Bande Dessinée
8 30 La bonne chanson Po Po Poésie
9 50 La jeune Parque Po Po Poésie
10 50 Michel Strogoff Ro Ro Roman
11 50 La Serpe d'or BD BD Bande Dessinée
12 70 Toujours aimer RG RG Roman de gare
13 70 Toujours aimante RG RG Roman de gare
14 72 Toujours aimé RG RG Roman de gare

Pour joindre deux tables il faut indiquer leur nom dans le FROM et utiliser la syntaxe avec le nom, le point et le champ de jointure.
Le problème avec cette jointure c'est que l'on se retrouve avec deux fois la "même" colonne, car elle vient une première fois de la table Livres et l'autre de la table Genres. Pour éviter cela et avoir quelque chose de plus sympa, la requête peut être modifiée comme ceci :
SELECT Titre, Livres.CodeGenre, LibelleGenre, Prix FROM Livres, Genres WHERE Livres.CodeGenre = Genres.CodeGenre;
Titre Livres.CodeGenre LibelleGenre Prix
Le glaive magique BD Bande Dessinée 40
Gaffes en gros BD Bande Dessinée 40
Lagaffe nous gâte BD Bande Dessinée 40
QRN sur Bretzelburg BD Bande Dessinée 45
Tour de manège RG Roman de gare 80
Le spectre aux balles d'or BD Bande Dessinée 45
La bonne chanson Po Poésie 30
La jeune Parque Po Poésie 50
Michel Strogoff Ro Roman 50
La Serpe d'or BD Bande Dessinée 50
Toujours aimer RG Roman de gare 70
Toujours aimante RG Roman de gare 70
Toujours aimé RG Roman de gare 72

Pour différencier les deux tables dans le SELECT il faut indiquer le nom de la table sur les champs à afficher qui sont éventuellement en double à cause de la jointure.

6 - Application
Une fois n'est pas coutume, une petite application sur le même exemple ne fait pas de mal pour comprendre encore mieux les tutoriaux.
Nous allons faire une sélection de tous les LibelleGenre et avec cette sélection, en utilisant le WHERE on affichera les livres correspondant.

La requête de sélection des libellés est la suivante :
SELECT * FROM Genres;
Le script permettant de créer le liste dans une boîte <select> :

1 <select name="genre">
2 <?php
3 mysql_connect($server, $user, $pass) or die('Erreur de connexion');
4 mysql_select_db($db) or die('Base inexistante');
5 $sql = 'SELECT * FROM Genres;';
6 $query = mysql_query($sql) or die( 'Erreur' );
7 $nb = mysql_num_rows($query);
8 if ( !$nb[0] ) {
9 echo '<option>Aucun genre</option>';
10 } else {
11 while ( $list = mysql_fetch_array( $query ) ) {
12 echo '<option value="'.$list['CodeGenre'].'">'.$list['LibelleGenre'].'</option>';
13 }
14 }
15 mysql_close();
16 ?>
17 </select>

Lorsque le visiteur valide le formulaire on reçoit donc une variable passé en POST sur la page de résultat où l'on va pouvoir faire notre requête de sélection avec le WHERE. Pour l'exemple on va choisir les BD.
SELECT * FROM Livres WHERE CodeGenre = 'BD';
Dans le script voici ce qui peut se passer :

1 <?php
2 mysql_connect($server, $user, $pass) or die('Erreur de connexion');
3 mysql_select_db($db) or die('Base inexistante');
4 $sql = "SELECT * FROM Livres WHERE CodeGenre = '".$_POST['genre']."';";
5 $query = mysql_query($sql) or die( 'Erreur' );
6 $nb = mysql_num_rows($query);
7 if ( $nb>0 ) {
8 echo 'Aucun livre dans ce genre';
9 } else {
10 while ( $list = mysql_fetch_array( $query ) ) {
11 //traitement du résultat
12 }
13 }
14 mysql_close();
15 ?>

Et voilà le résultat :

Livres

IDLivre Prix Titre CodeGenre
1 40 Le glaive magique BD
3 40 Gaffes en gros BD
4 40 Lagaffe nous gâte BD
5 45 QRN sur Bretzelburg BD
7 45 Le spectre aux balles d'or BD
11 50 La Serpe d'or BD

Et bien voilà nous avons fait le tour du WHERE, à bientôt !!


Ajouter une réponse
Nom
Email
Titre

Mise en forme : gras = [b]...[/b], italic = [i]...[/i], souligné = [u]...[/u], citation = [quote]...[/quote], lien = [url]liens_externe[/url] ou [url nom=texte]liens_externe[/url], code source : [code]...[/code]

Mémoriser mon nom et mon email : Oui Non
www.phpdebutant.org © 2017 - L'équipe de phpDebutant - Hébergement : WDMédia-hébergement
DEBUTEZ !
 
  0.  Introduction
  1.  Afficher une phrase ou une image
  2.  Afficher la date et l'heure
  3.  PHP dans du code HTML
  4.  La concaténation
  5.  Récupérer les valeurs d'un formulaire
  6.  Les structures de contrôle
  7.  Ecrire et lire dans un fichier texte
  8.  Les fonctions utilisateurs
  9.  Les variables d'environnement
  10.  Quelques fonctions utiles
  11.  SQL/MySQL (Create, Alter & Drop)
  12.  SQL/MySQL (Insert et Select)
  13.  SQL/MySQL (Delete et Update)
  14.  SQL/MySQL (Where)
  15.  Fonctions PHP pour mySQL
  16.  Interroger une table MySQL
  17.  Alimenter une ou plusieurs tables mySQL
  18.  Les pseudos-frames
  19.  Les sessions php4
  20.  Affichage page par page
  21.  Images dynamiques
  22.  Ca marche pas ?
  23.  Variables globales à OFF
  24.  Les variables dynamiques