Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 10h34   #1
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
Par défaut SELECT sur id unique

salutatous,

j'ai créé une table 'ma_table' dans laquelle j'ai 5 champs :

- id
- intro
- seminaire
- date_debut
- date_fin

dans toute ma table, un seul id possèdera du contenu pour 'intro'

le contenu de 'ma_table' se présentera donc comme ceci :

1, blablabla_intro, blablabla_seminaire, 2011-02-10, 2011-02-11
2, , blablabla_seminaire, 2011-05-27, 2011-05-28
3, , blablabla_seminaire, 2011-08-22, 2011-08-23
... etc ...

je souhaite afficher uniquement le contenu de 'intro' :

au sein d'une boucle, avec une requête du type :
Code :
$sql = 'SELECT intro FROM ma_table';
ça m'affiche :
- 'blablabla_intro' pour l'id 1
- rien pour l'id 2
- rien pour l'id 3

mais je souhaite afficher uniquement l'id qui possède un contenu pour 'intro'

si je fait une requête du type :
Code :
$sql = 'SELECT intro FROM ma_table WHERE id=1';
ça m'affiche bien l'unique id possèdant du contenu pour 'intro'

ET VOICI MA QUESTION :
comment faire une requête qui repère et affiche automatiquement l'unique id qui possède un contenu pour 'intro' ?
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h36   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
question de débutant

Code :
SELECT id FROM latable WHERE intro NOT NULL ;
edit 1, dsl mal lu la question.
edit 2, ya tres peu de chance que cet id soit unique. Pour la condition j'hésite entre not null et LIKE '%' voir LIKE '_%'
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 10h56   #3
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Salut

Faudrait vérifier dans la table si le valeur est réellement NULL, et non vide, car MySQL fait le distingo entre une valeur NULL est vide.

D'ailleurs, vu qu'il soit autorisé de rien avoir dans ce champ "intro", il faudrait coté structure accepter les valeurs NULL.
Puis coté fonctionnement s'assurer lors d'une insertion ou mise à jour de bien enregistrer une valeur NULL (et non vide).

A ce moment là une requête comme ci-dessus devrait faire l'affaire :
Code :
1
2
3
4
 
SELECT intro
FROM ma_table
WHERE intro IS NOT NULL
Devrait retourner tous les intro non NULL.
Et si tu est certain qu'il y en a qu'un qui est NULL, 1 seul intro sera retourné.


Citation:
comment faire une requête qui repère et affiche automatiquement l'unique id qui possède un contenu pour 'intro' ?
C'est plutôt l'inverse que tu souhaite obtenir, non ?
Soit obtenir l'unique ID donc l'intro est NULL ?
Dans ton exemple, il n'y en a qu'1 qui ne possède pas d'intro, tous les autres en ont.

Pour avoir l'unique ID dont l'intro est NULL :
Code :
1
2
3
4
 
SELECT intro
FROM ma_table
WHERE intro IS NULL
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 11h02   #4
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
NOT NULL n'est pas bon dans ce cas car la valeur est vide et non null, si tu garde cette structure tu doit plutôt appliquer une requête du type :
Code :
SELECT id FROM matable WHERE intro <> '';
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h01   #5
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
tout d'abord merci à tous pour votre réactivité

j'ai essayé les solutions proposées mais j'ai des erreurs !

voici mon code de base :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sql = 'SELECT intro FROM ma_table WHERE id=1';
 
$sql_bis = mysql_query($sql);
echo mysql_error();
 
// +++++++++++++++++++++++++++++++++++++
 
// si aucune donnée
if($intro == '') {
 
	echo 'AFFICHAGE 1';
	echo '<br /><br />';
 
// si on obtiens des données
} else {
 
	echo 'AFFICHAGE 2';
	echo '<br /><br />';
}
si je met cette requête, sugérée par gene69 :
Code :
$sql = 'SELECT id FROM ma_table WHERE intro NOT NULL';
j'ai le message d'erreur suivant :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 1

j'ai également essayé de mettre :
Code :
$sql = 'SELECT id FROM ma_table WHERE NOT ISNULL(intro)';
et j'obtiens le même message d'erreur !

j'ai donc essayé de mettre la solution de RunCodePhp :
Code :
$sql = 'SELECT intro FROM ma_table WHERE intro IS NOT NULL';
j'obtiens à nouveau le même message d'erreur !

si je met la requête proposée par gwharl :
Code :
$sql = 'SELECT id FROM ma_table WHERE intro <> ''';
j'obtiens le message d'erreur suivant :
Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /home/balablabla/balablabla...

Bref je m'en sors pas...

pour info j'ai créé 'intro' dans ma table, comme ceci :
`intro` mediumtext NOT NULL

Nico
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 12h05   #6
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Entoure ta requête par des doubles quotes

Code :
$sql = "SELECT id FROM ma_table WHERE intro <> ''";
Les autres requête ne marcherons pas car tu n'as pas de valeur null mais vides.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 13h32   #7
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
IS NULL ou IS NOT NULL est pourtant une syntaxe 100% valide (pour MySQL au moins).
Tu ne devrais pas avoir d'erreur de syntaxe à ce niveau, juste obtenir ou pas de résultat.
Donc l'erreur viendrait ailleurs.

Ceci dit, comme je l'avais expliqué, si une donnée doit être NULL, il vaut mieux faire en sorte quelle soit réellement NULL plutôt qu'une pseudo valeur comme vide.
NULL est pour ainsi dire une valeur à part entière (ni vide, ni 0, ni FALSE), selon le cas comme les jointure de tables, ça peut être un handicap si la valeur n'est pas réellement NULL.


Aussi, dans ton code tu initialise avec $sql_bis, et après tu exploite $intro.
Il y a quelque chose qui ne vas pas normalement.


Mise à part ça, en mettant <> '' (ou != '') fonctionnera mieux si c'est des valeurs vides comme l'a proposé gwharl.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 13h34   #8
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
gwharl,

cool, ça fonctionne si je met entre double quote

MAIS si je met comme ceci :
Code :
$sql = "SELECT id FROM client_" . $ma_table . "WHERE intro <> ''";
j'ai l'erreur suivante :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<> ''' at line 1
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 13h41   #9
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 706
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 706
Points : 3 274
Points : 3 274
Citation:
MAIS si je met comme ceci :
Il manque un espace entre le nom de la table et le WHERE à mon avis.

D'ailleurs, je te conseils d'indenter ton code SQL, ça apporte vraiment de la clarté au code, et au bout on débug plus vite et on évite certaines erreurs de syntaxe.

Exemple :
Code :
1
2
3
4
 
$sql = "SELECT id
FROM client_" . $ma_table . "
WHERE intro <> ''";
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 13h49   #10
Membre du Club
 
Inscription : mars 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 51
Points : 42
Points : 42
en effet, il manque un espace entre le nom de la table et where
Code :
$sql = "SELECT id FROM client_" . $ma_table . "WHERE intro <> ''";
d'ailleurs tu pourrais le noter comme ça
Code :
$sql = "SELECT id FROM client_$ma_table WHERE intro <> ''";
personnellement je préfère cette notation
Code :
1
2
3
$sql = 'SELECT `id`
FROM `client_'. $ma_table .'`
WHERE `intro` <> \'\' ;';
christoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 14h08   #11
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Code :
WHERE NOT ISNULL(intro)
oui mais ISNULL() possede une page d'aide et les fonctions mysql ont une syntaxe, ainsi que le NOT.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 14h10   #12
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
Citation:
Envoyé par christoff Voir le message
personnellement je préfère cette notation
Code :
1
2
3
$sql = 'SELECT `id`
FROM `client_'. $ma_table .'`
WHERE `intro` <> \'\' ;';
personnellement je trouve que c'est aussi mauvais l'une que l'autre.

si tu veux isoler le nom de la table avec une variable, utilise un système qui permet d'ajouter automatiquement les guillemets de protections.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 14h42   #13
Nouveau Membre du Club
 
Inscription : décembre 2006
Messages : 151
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 151
Points : 37
Points : 37
merci RunCodePhp,

c'était bien l'espace manquant avant le WHERE qui mettait la mouise !

voici donc la ligne de code qui solutionne mon problème :
Code :
$sql = "SELECT id FROM client_" . $ma_table . " WHERE intro <> ''";
merci à tous pour tous vos conseils
nicomax34 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2011, 14h49   #14
Membre du Club
 
Inscription : mars 2007
Messages : 51
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 51
Points : 42
Points : 42
Citation:
Envoyé par gene69 Voir le message
personnellement je trouve que c'est aussi mauvais l'une que l'autre.

si tu veux isoler le nom de la table avec une variable, utilise un système qui permet d'ajouter automatiquement les guillemets de protections.
Personnellement je n'utilise pas de requêtes dans le genre. Je parle ici uniquement de syntaxe, pas de "système" perfectionné qui ajoutera des guillemets automatiquement.
christoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h27.


 
 
 
 
Partenaires

Hébergement Web