Rechercher : dans
Par :

SQL : double condition sur une seule colonne

Dernière réponse le 4 fév 2009 à 14:26:25 bazart, le 3 fév 2009 à 11:29:06 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un petit soucis tout bête (j'en suis sûr), j'aimerais mettre deux condition sur une seule colonne, par exemple :

SELECT num_materiel  FROM `caracteristiques` 
WHERE  caracteristique like "noir" And caracteristique like "HD ready"


Sachant que la table caracteristiques a quatre colonne :

code : clé primaire de la table

num_materiel : identifiant du materiel qui est lié a la table materiel.

type_caract : La "famille" de la caracteristique ex : "couleur", "Haute-définition" ...

caracteristique : la caracteristique du materiel en question.

Commentaire : si jamais il y a un commentaire.


Tout ceci en sachant que je ne peut pas faire une nouvelle table, j'ai plus de 17 000 enregistrement dans celle ci.

voila si il y a d'autre renseignement a donner ne pas hésiter !

Merci par avance.
Configuration: Windows XP
Opera 9.62

Meilleures réponses pour « SQL : double condition sur une seule colonne » dans :
Supprimer les doublons dans une colonne Excel Voir Pour extraire les doublons dans une colonne Excel : Cliquer sur le menu "Données" "Filtrer" "Filtre élaboré" Dans ce menu, sélectionner la colonne où se trouvent les doublons Cocher la case "Extraire sans doublon" La seule chose est que...
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
SQL - Sous-requêtes VoirExpression des sous-requêtes Effectuer une sous-requête consiste à effectuer une requête à l'intérieur d'une autre, ou en d'autres termes d'utiliser une requête afin d'en réaliser une autre (on entend parfois le terme de requêtes en...

1

nicdev, le 3 fév 2009 à 11:37:41

Tu cherches toutes les lignes avec les 2 infos en meme temps sur la meme ligne ou celles avec l'un ou l'autre ou les 2?

2 infos en meme temps sur la meme ligne

SELECT num_materiel FROM `caracteristiques`
WHERE caracteristique like "%noir%" And caracteristique like "%HD ready%"

l'un ou l'autre ou les 2

SELECT num_materiel FROM `caracteristiques`
WHERE caracteristique like "%noir%" OR caracteristique like "%HD ready%"

Répondre à nicdev

2

oscarapace, le 3 fév 2009 à 11:39:28

Si je comprends bien le champ doit contenir le mot "noir" et le mot "HD ready", donc la requete deviendrai

SELECT ... WHERE caracteristique LIKE '% noir % HD ready %' OR caracteristique LIKE '% HD ready % noir %'

Répondre à oscarapace

3

bazart, le 3 fév 2009 à 11:42:52

En fait je veut que les deux conditions soient respectées a la fois, c'est a dire que le materiel soit noir et HD ready.

C'est a dire comme pour ta premiere requete or quand je l'execute j'ai le droit a un beau "MySQL n'a retourné aucun enregistrement." des familles ^^.

Répondre à bazart

4

bazart, le 3 fév 2009 à 11:47:29

Ah et j'ai du oublier de preciser que "noir" et "HD ready" se situent sur deux ligne différentes. pour la premiere ligne ce serait :

125 | 4567 | couleur | noir | NULL

et

982 | 4567 | definition | HD ready | NULL



Désolé si je n'etait pas assez clair ^^ .

Répondre à bazart

5

nicdev, le 3 fév 2009 à 11:51:54
  • +1

Oui C'est une info importante le fait que cela soit sur 2 lignes différentes.

SELECT num_materiel FROM `caracteristiques` as carac
WHERE caracteristique like "%noir%" And exists (SELECT num_materiel FROM `caracteristiques`
WHERE caracteristique like "%HD ready%" AND carac.num_materiel = caracteristiques.num_materiel)

Répondre à nicdev

6

bazart, le 3 fév 2009 à 11:57:59

Merci ca marche !

Et si jamais je veut rajouter une 3eme condition etc.. j'usqu'a 5 ? parcequ'en fait le but est de crée un moteur de recherche multicritère...

J'implémente une deuxieme sous requête genre :

SELECT num_materiel FROM `caracteristiques` as carac
WHERE caracteristique like "%noir%" And exists (SELECT num_materiel FROM `caracteristiques` as caract2
WHERE caracteristique like "%HD ready%" AND carac.num_materiel = caracteristiques.num_materie And exists (SELECT num_materiel FROM `caracteristiques`
WHERE caracteristique like "%HDMI%" AND caract2.num_materiel = caracteristiques.num_materiel))

Répondre à bazart

7

nicdev, le 3 fév 2009 à 12:04:39

A tester mais je pense que cela est jouable.

Répondre à nicdev

8

bazart, le 3 fév 2009 à 14:28:18

Ok, merci .

Répondre à bazart

9

 oscarapace, le 4 fév 2009 à 14:26:25

Par contre si tu as beacoup de requetes avec des LIKE, et si ta base de données est importante ainsi que le nombre d'utilisateurs, ça va ramer grave. dans ce cas pour un moteur de recherche il faut se renseigner sur le "fulltext search". mais là ça dépendra de ton type de base de données (mysql ou autre)

Répondre à oscarapace