OVH Cloud OVH Cloud

SELECT AVEC LIKE

16 réponses
Avatar
Otto
Bonjour à tous,

J'utilise le select suivant pour une recherche:

$requete = $requete = "select
ID,RSOCIALE,COMMERCE,RESP,RUE,NP,VILLAGE from fncid where
RSOCIALE like '%$filtre%'";

Avec cette requète je limite la recherche sur RSOCIALE.
Comment faire pour que tous les champs de la table soient
pris en compte?

J'ai essayé avec "...where * like '%$filtre%'"; mais cela
fonctionne pas.

Pendant que j'y suis comment aussi spécifier plusieurs
champs?

Merci d'avance pour tous renseignements.

Bon weekend à tous

Otto

10 réponses

1 2
Avatar
Ph. B.
Otto a écrit:
Bonjour à tous,

J'utilise le select suivant pour une recherche:

$requete = $requete = "select
ID,RSOCIALE,COMMERCE,RESP,RUE,NP,VILLAGE from fncid where
RSOCIALE like '%$filtre%'";

Avec cette requète je limite la recherche sur RSOCIALE.
Comment faire pour que tous les champs de la table soient
pris en compte?

J'ai essayé avec "...where * like '%$filtre%'"; mais cela
fonctionne pas.

Pendant que j'y suis comment aussi spécifier plusieurs
champs?

Merci d'avance pour tous renseignements.

Bon weekend à tous

Otto



Bonjour,

Je ne suis sur pas d'avoir compris le sens de ta question mais tu peux
écrire:

WHERE RSOCIALE LIKE '%$filtre%'
OR COMMERCE LIKE '%$filtre%'
...

A moins que tu ne veuilles agréger toutes tes colonnes ?
Si elles sont du même type:

WHERE (RSOCIALE + COMMERCE + RESP + RUE + NP + VILLAGE) LIKE '%$filtre%'

--
Philippe
Avatar
Otto
In article <41fcddf7$0$27956$, Ph. B. wrote:
Je ne suis sur pas d'avoir compris le sens de ta question mais tu peux
écrire:

WHERE RSOCIALE LIKE '%$filtre%'
OR COMMERCE LIKE '%$filtre%'
....

A moins que tu ne veuilles agréger toutes tes colonnes ?
Si elles sont du même type:

WHERE (RSOCIALE + COMMERCE + RESP + RUE + NP + VILLAGE) LIKE '%$filtre%'



Ne fonctionne pas pourtant tous les champs sont du type varchar!


Bonjour Philippe,

Merci pour ton aide, j'ai utilisé la variate suivante qui fonctionne très
bien:

$requete = "select ID,RSOCIALE,COMMERCE,RESP,RUE,NP,VILLAGE from fncid
where RSOCIALE LIKE '%$filtre%'
OR COMMERCE LIKE '%$filtre%'
OR RESP LIKE '%$filtre%'
OR RUE LIKE '%$filtre%'
OR NP LIKE '%$filtre%'
OR VILLAGE LIKE '%$filtre%'
OR TEL LIKE '%$filtre%'";

Bon weekend

Otto
Avatar
Ph. B.
Otto wrote:

In article <41fcddf7$0$27956$, Ph. B. wrote:

Je ne suis sur pas d'avoir compris le sens de ta question mais tu peux
écrire:

WHERE RSOCIALE LIKE '%$filtre%'
OR COMMERCE LIKE '%$filtre%'
....

A moins que tu ne veuilles agréger toutes tes colonnes ?
Si elles sont du même type:

WHERE (RSOCIALE + COMMERCE + RESP + RUE + NP + VILLAGE) LIKE '%$filtre%'





Ne fonctionne pas pourtant tous les champs sont du type varchar!



AMHA, cela vient de l'opérateur de concaténation qui n'est peut-etre pas
le "+" avec ton SGBD (MySql ?)...

--
Philippe
Avatar
Daniel
"Ph. B." writes:

Otto wrote:

> In article <41fcddf7$0$27956$, Ph. B. wrote:
>
>> Je ne suis sur pas d'avoir compris le sens de ta question mais tu
>> peux écrire:
>>
>>WHERE RSOCIALE LIKE '%$filtre%'
>>OR COMMERCE LIKE '%$filtre%'
>>....
>>
>>A moins que tu ne veuilles agréger toutes tes colonnes ?
>>Si elles sont du même type:
>>
>>WHERE (RSOCIALE + COMMERCE + RESP + RUE + NP + VILLAGE) LIKE '%$filtre%'
>>


> Ne fonctionne pas pourtant tous les champs sont du type varchar!

AMHA, cela vient de l'opérateur de concaténation qui n'est peut-etre
pas le "+" avec ton SGBD (MySql ?)...



c'est le cas de l'opérateur de concaténation sous mysql . Parcontre
j'ai un sérieux doute sur l'efficacité de la requête, car le like
n'utilise pas les index ;-(

--
suivre ce lien pour répondre:
http://cerbermail.com/?2KrV3YZXnn
Daniel
;-)
Avatar
Ph. B.
Daniel wrote:
"Ph. B." writes:


Otto wrote:


In article <41fcddf7$0$27956$, Ph. B. wrote:


Je ne suis sur pas d'avoir compris le sens de ta question mais tu
peux écrire:

WHERE RSOCIALE LIKE '%$filtre%'
OR COMMERCE LIKE '%$filtre%'
....

A moins que tu ne veuilles agréger toutes tes colonnes ?
Si elles sont du même type:

WHERE (RSOCIALE + COMMERCE + RESP + RUE + NP + VILLAGE) LIKE '%$filtre%'







Ne fonctionne pas pourtant tous les champs sont du type varchar!



AMHA, cela vient de l'opérateur de concaténation qui n'est peut-etre
pas le "+" avec ton SGBD (MySql ?)...




c'est le cas de l'opérateur de concaténation sous mysql . Parcontre
j'ai un sérieux doute sur l'efficacité de la requête, car le like
n'utilise pas les index ;-(



En effet, je ne doute pas de l'(in)efficacité d'une requête de ce type ! ;-)
Un LIKE est par nature non performant, de plus on réalise une clause de
filtre sur une concaténation de colonnes ! :-(

J'ai juste apporté une réponse à une question donnée. Il faudrait
connaitre le modèle de données, définir ce qui est exactement voulu pour
fournir une solution plus adéquate...

--
Philippe.
Avatar
loufoque
Otto a dit le 30/01/2005 14:01:

J'utilise le select suivant pour une recherche:

$requete = $requete = "select
ID,RSOCIALE,COMMERCE,RESP,RUE,NP,VILLAGE from fncid where
RSOCIALE like '%$filtre%'";

Avec cette requète je limite la recherche sur RSOCIALE.
Comment faire pour que tous les champs de la table soient
pris en compte?



Mieux vaut faire un FULLTEXT index sur l'ensemble des champs.
Bien plus puissant et performant.
Avatar
Otto
In article <41fd59c0$0$1989$, Loufoque
wrote:
Mieux vaut faire un FULLTEXT index sur l'ensemble des champs.
Bien plus puissant et performant.



Cette table à env. 500 enregistrements et va rester dans cette
ordre de grandeur.
Je trouve que pour l'instant le temps de réponse est rapide.
Je suis aussi interessé pour apprendre MySQL et comment
utiliser ce FULLTEXT.
Pourrais-tu à l'occasion me faire un petit exemple sur la base
de mes champs.

Bonne journée et encore merci

Otto
Avatar
loufoque
Otto a dit le 31/01/2005 à 12h35:
Je suis aussi interessé pour apprendre MySQL et comment
utiliser ce FULLTEXT.



Tu trouves tout dans la documentation
http://dev.mysql.com/doc/mysql/en/fulltext-search.html
Avatar
Bernard Le Lann
Bonjour Philippe,


J'utilise pas mal le LIKE sous mySQL aussi j'aimerais savoir comment (ou
pourquoi) LIKE est par nature non performant.

Merci :->)

Bernard

| En effet, je ne doute pas de l'(in)efficacité d'une requête de ce type !
;-)
| Un LIKE est par nature non performant, de plus on réalise une clause de
| filtre sur une concaténation de colonnes ! :-(
|
Avatar
Jacques Caron
On Wed, 2 Feb 2005 18:37:32 +0100, Bernard Le Lann
wrote:

J'utilise pas mal le LIKE sous mySQL aussi j'aimerais savoir comment (ou
pourquoi) LIKE est par nature non performant.



Parce qu'il ne peut pas utiliser d'index (sauf cas particuliers). Ainsi,
si tu fais une requête du type:

SELECT * FROM table WHERE champ=X

et que tu as un index sur table(champ), alors cet index sera utilisé pour
aller directement au(x) bon(s) enregistrements. Ca représente quelques
blocs à lire sur disque au maximum (s'ils ne sont pas déjà en cache).

Si tu fais une requête du type:

SELECT * FROM table WHERE champ LIKE '%X%'

Alors le seul moyen pour le serveur SQL c'est de lire tous les
enregistrements de la table un par un, regarder s'ils correspondent ou
pas, et passer au suivant. Sur une table un tant soit peu importante,
c'est nettement moins performant.

PostgreSQL sait utiliser un index pour une requête du type:

SELECT * FROM table WHERE champ LIKE 'X%'

(i.e. le champ doit absolument commencer par X)

Mais ce n'est pas valable pour un LIKE '%X' ou un '%X%'. Je suppose que
c'est pareil pour MySQL.

Evidemment, si tu n'as pas d'index sur ta table, ça ne change pas grand
chose (un chouïa de CPU quand même), mais là on ne peut plus rien pour toi
;->

Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/
1 2