Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes 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 16/12/2011, 14h31   #1
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Par défaut Recherche sur les lignes

Bonjour,

j'ai une table masque comme suit

Code :
1
2
3
4
5
obervation | var1 | var2 | var3
10-12-2011|true  |true   | true
11-12-2011|true  |true   | false
12-12-2011|true  |true   | true
13-12-2011|false  |true   | false
Je veux récupérer seulement les lignes qui ont true comme valeurs. Cette recherche par variable est facile mais j'ai un peu de mal pour le faire sur les lignes.
Quelqu'un à une idée de comment faire?
Je veux le résultat suivant
Code :
1
2
3
Observation
10-12-2011
12-12-2011
Merci pour votre aide
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 14h37   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
Bonjour,

Reprenons les bases : http://sqlpro.developpez.com/cours/sqlaz/select/

Revenez avec votre requête si vous n'y arrivez pas
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 14h53   #3
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Oui, je peux faire une requête comme ca
Code :
SELECT observation FROM  mask WHERE var1=true AND var2=true AND var3=true
Mais mes colonnes variable peuvent être nombreuses (80 ou plus). Y a t-il un autre moyen d'y arriver ?
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 14h55   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 655
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 655
Points : 2 657
Points : 2 657
En SQL non.

après si vous utilisez votre requête SQL dans un programme extèrieur peut-être qu'une boucle ou autre pour construire votre requête est envisageable.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 15h07   #5
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Dans ce cas, je peux rajouter une colonne qui identifie si mes observations peuvent ou non être selectionnées ou non. Sinon, je vais également orienté mes recherches dans l'utilisation des boucles dans les procedures stockées de mysql.
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 16h56   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Mais mes colonnes variable peuvent être nombreuses (80 ou plus).
Ça veut dire que votre BDD est mal modélisée !

Si ce n'est pas trop tard, changez votre modèle.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 22h02   #7
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Oui, je sais car j'ai abandonné la modélisation de ma base de données en relationelle car elle n'est pas compatible à ce qu'on veut faire. Donc, j'ai gardé l'architecture tabulaire
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 22h28   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Citation:
Envoyé par pbatty1 Voir le message
Oui, je sais car j'ai abandonné la modélisation de ma base de données en relationelle car elle n'est pas compatible à ce qu'on veut faire. Donc, j'ai gardé l'architecture tabulaire
Ah bon !

D'après vos données et le nombre variable de colonnes varX, je vois la règle de gestion suivante :
Une observation comprend une à plusieurs variables et une variable peut être comprise dans plusieurs observations.

Ce qui donne le MCD suivant :
observation -1,n----comprendre----0,n- variable

Et ce qui donne les tables suivantes :
observation (obs_id, obs_date...)
variable (var_id, var_libelle...)
obs_comprendre_var (ocv_id_observation, ocv_id_variable, ocv_valeur)

Citation:
Je veux récupérer seulement les lignes qui ont true comme valeurs
Je crois comprendre qu'il s'agit de retenir les observations dont toutes les variables sont à TRUE ?
Code :
1
2
3
4
5
6
7
8
9
10
11
SELECT o.obs_date
FROM observation o
INNER JOIN obs_comprendre_var ocv ON ocv.ocv_id_observation = o.obs_id
GROUP BY o.obs_date
HAVING COUNT(ocv.ocv_id_variable) = 
			SUM(
				CASE
					WHEN ocv_valeur = TRUE THEN 1
					ELSE 0
				END
			)
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 16h56   #9
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 203
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 203
Points : 38
Points : 38
Merci pour cette piste. Pour le moment dans notre cas on ne va pas utiliser la forme relationnelle. Donc j'ai une requete comme cela

Code :
1
2
3
4
SELECT p.observation, (IF (m.var1=true,p.var1,NULL)) AS value FROM raw_data p INNER JOIN mask m ON p.observation=m.observation  WHERE 
p.observation
IN(SELECT k.observation FROM (SELECT observation,IF  ((var1 + var2)<2,false,true) AS value
FROM mask) r INNER JOIN raw_data k ON r.observation=k.observation WHERE r.value=true)
Je peux optimiser en rajoutant une colonne pour savoir si l'observation est active ou non
pbatty1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 12h47   #10
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
Citation:
Envoyé par pbatty1 Voir le message
Je peux optimiser en rajoutant une colonne pour savoir si l'observation est active ou non
Mon pauvre... Vous voulez optimiser une requête en rajoutant encore une colonne de plus ? 80 ne vous suffisent pas ???
Non seulement cela n'optimisera rien du tout, cela ralentira globalement votre base et vous aurez de plus en plus de blocages.
Un SGBDR n'est pas un tableur et votre modèle pourri ne s'optimise pas comme cela. La première des optimisations consiste justement à faire un vrai modèle relationnel. Et là vous en êtes plus que loin..

Et tant que vous complairez dans votre bêtise n'attendez rien de probant sur le plan des performances !!!!

parfois je me demande si je rêve....

En tout cas le forum MySQL est ma régalade journalière vu le niveau des questions qui y sont posées...

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2011, 11h24   #11
Membre chevronné
 
Inscription : juillet 2006
Messages : 1 194
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 1 194
Points : 751
Points : 751
En conservant votre structure, vous pouvez procéder ainsi :

Code :
1
2
3
4
 
SELECT observation
FROM  mask
WHERE 'false' NOT IN (var1, var2, var3, ...)
Sergejack est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h50.


 
 
 
 
Partenaires

Hébergement Web