Selection stricte

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Selection stricte

Re: Selection stricte

par sylvaing26 » 24 avr. 2011, 01:08

Ah non pas tout à fait...
WHERE genre != "Saule" AND espece != "blanc"
va te retourner ni les "Saule", ni les "blanc"... donc pas de Saule rouge, ni de Pin blanc.

Si tu veux tous les enregistrement SAUF les "Saule blanc", alors il te faut aussi inverser l'opérateur
WHERE genre != "Saule" OR espece != "blanc"
tu peux aussi rechercher tous les enregistrements de Saule blanc, et utiliser l'opérateur NOT (qui n'à en principe pas de raison de retourner de résultat différent), pour inverser le résultat à retourner
WHERE NOT(genre = "Saule" AND espece = "blanc")
résultat : les enregistrement qui ne sont pas à la fois Saule et blanc

Merci tout est parfait !!!
Explication très claire en plus !
Rien à rajouter sauf un énorme résolu !! et un méga gros merci ;)

Re: Selection stricte

par Ryle » 24 avr. 2011, 00:36

Ah non pas tout à fait...
WHERE genre != "Saule" AND espece != "blanc"
va te retourner ni les "Saule", ni les "blanc"... donc pas de Saule rouge, ni de Pin blanc.

Si tu veux tous les enregistrement SAUF les "Saule blanc", alors il te faut aussi inverser l'opérateur
WHERE genre != "Saule" OR espece != "blanc"
tu peux aussi rechercher tous les enregistrements de Saule blanc, et utiliser l'opérateur NOT (qui n'à en principe pas de raison de retourner de résultat différent), pour inverser le résultat à retourner
WHERE NOT(genre = "Saule" AND espece = "blanc")
résultat : les enregistrement qui ne sont pas à la fois Saule et blanc

Re: Selection stricte

par sylvaing26 » 23 avr. 2011, 20:18

Exact, je rejouterai même que pour mon cas ba ... rien ne marche !
J'ai palié à ce problème en rajoutant un champ à ma base sql.
En effet, pour est plus précis, en fait j'ai dans ma base de données un champ "genre" et un champ "espece".
Par exemple :

genre | Espece |
Chêne | rouvre |
Chêne | pédonculé |
Chêne | liège |
Peuplier | blanc |
Saule | blanc |
Saule | roux |
Aulne | blanc

etc ....

Donc voila, j'ai plusieurs genres dont certains sont les mêmes, mais aussi l'espèce, qui peut être la même pour différents genres.

Par exemple, je voudrais tous sauf genre =" saule" et espece="blanc"

Or avec toutes les solutions citées j'ai le même problème, SELECT genre FROM mabase WHERE genre != "Saule" AND espece != "blanc" va me retourner tous les enregistrements ou le genre n'est pas saule et l'espece blanc, donc je n'ai plus aucun saule dans les resultats, ni de genre ou l'espece est "blanc" ...

Bon j'ai résolu le problème en faisant un champ nomcomplet" ou du coup j'ai mis "Saule blanc" et ou je fait une selection SELECT genre FROM mabase WHERE nomcomplet != "Saule blanc"

Je pense qu'il dois y avoir un moyen mais c'est la prise de tête, je suis sur que c'est tout bête mais je vois pas ...

Re: Selection stricte

par xTG » 22 avr. 2011, 08:02

Euh oui des = et pas des != je me suis planté en recopiant. (quand on est allergique aux copier/coller voilà ce qui arrive...)

Cela dit transformer le NOT ne correspond pas... Allez savoir pourquoi, en logique c'est tout à fait correct, mais MySQL ne l'interprète pas pareil...
Je n'avais pas les mêmes résultats entre :
NOT( (type ='truc' AND nom = 'chose')
et
type != 'true' OR nom != 'chose'

Re: Selection stricte

par Ryle » 21 avr. 2011, 22:46

Le not est simplement le résultat inverse de ta condition :)
Le contraire de "=" étant "!=", NOT (type ='truc') équivaut donc à type!='truc'

Et de la même manière NOT(type ='truc' AND nom = 'chose') revient donc à dire type !='truc' OR nom != 'chose' (le contraire de "condition 1 ET condition 2", c'est "pas de condition 1 OU pas de condition 2")

Re: Selection stricte

par sylvaing26 » 21 avr. 2011, 21:25

SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')
ca reviens à
SELECT type, nom FROM mabase WHERE type ='truc' OR nom = 'chose'

Oui c'est vrai la synthaxe n'était pas bonne mais elle m'a mis sur la voie

La bonne requete est finalement :
SELECT type, nom FROM mabase WHERE NOT(type ='truc' AND nom = 'chose')
Mais ce NOT, en quoi est-il différent ?

Re: Selection stricte

par popy » 21 avr. 2011, 20:03

SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')
ca reviens à
SELECT type, nom FROM mabase WHERE type ='truc' OR nom = 'chose'

Re: Selection stricte

par xTG » 21 avr. 2011, 16:07

SELECT type, nom FROM mabase WHERE NOT(type !='truc' AND nom != 'chose')
:)

Re: Selection stricte

par sylvaing26 » 21 avr. 2011, 13:13

En fait, ta requete devrait rien te retourner. Tes trois lignes contiennent soit truc soit chose.

Re réfléchis a ce que tu veux exactement.

Oui mon exemple n'étais pas correct en effet, je viens de l'éditer

Re: Selection stricte

par popy » 21 avr. 2011, 13:10

En fait, ta requete devrait rien te retourner. Tes trois lignes contiennent soit truc soit chose.

Re réfléchis a ce que tu veux exactement.

Selection stricte

par sylvaing26 » 21 avr. 2011, 12:21

Bonjour,
je suis actuellement sur une enorme casse tête niveau selection SQL, j'ai cette base :

| id | type | nom
------------------------------
| 1 | truc | machin
| 2 | truc | chose
| 3 | bidule | chouette

Je n'arrive pas à faire un select distinct sur ma base, je m'explique.
Je voudrais qu'on me retourne les enregistrements distincts dont le type n'est pas " truc" et le nom "chose"
Avec ce que j'explique SQL devrait me retourner la ligne 1 et 3.

Avec ma requete je n'ai que la ligne 3 :
SELECT DISTINCT type, nom FROM mabase WHERE type !='truc' AND nom != 'chose'
Merci pour l'aide ;)