Търсене в БД?

confiscate

Registered
Здравейте,

Имам колона в БД , която съдържа кодове, за един продукт кодовете може да са няколко, може и да е един. Ако са няколко съм ги разделил със запетайка. В момента за търсенето на кода използвам LIKE %.. % , но имам следния проблем. Ако имам код 4000АЕ и код 4000А и искам да изкарам само 4000А, то ми изкарва и 4000АЕ. Как може да се оправи това. Искам да ми изкарва точно определния код, който съм написал.

Благодаря предварително!

Поздрави :)
 
confiscate каза:
Здравейте,

Имам колона в БД , която съдържа кодове, за един продукт кодовете може да са няколко, може и да е един. Ако са няколко съм ги разделил със запетайка. В момента за търсенето на кода използвам LIKE %.. % , но имам следния проблем. Ако имам код 4000АЕ и код 4000А и искам да изкарам само 4000А, то ми изкарва и 4000АЕ. Как може да се оправи това. Искам да ми изкарва точно определния код, който съм написал.

Благодаря предварително!

Поздрави :)
Използвай exact match.. вместо wildcards %term% -> 'term'
Това ще върне само, което съдържа 'BLA'
Код:
SELECT  *
FROM    table
WHERE   column = 'BLA'
Това ще върне всичко, което започва с 'BLA'
Код:
SELECT  *
FROM    table
WHERE   column = %BLA%
 
А ако имам повече от един код, тогава май няма да стане по този начин. Повече от един код визирам по тзои начин: 4000, 4000А, 4010B. В един ред.
 
vinsbg каза:
confiscate каза:
А ако имам повече от един код, тогава май няма да стане по този начин. Повече от един код визирам по тзои начин: 4000, 4000А, 4010B. В един ред.
Функция FIND_IN_SET може би ще помогне

Ето ми БД

Ето ми и заявката
[sql]"SELECT * FROM `catalog` WHERE FIND_IN_SET('$keywords',code) <> 0"[/sql]

Интересното е, че някои ги намира, но други изобщо неще. Например ако напиша 4700Е2 изобщо не го намира. Къде може да бъркам ? :(
 
Нормализирай си базата данни.

Mysql е релационна база данни, може да се възползваш от това. :?:

PS: Това, че някои ги намира, а други не, може би идва от това, че имаш пред някои запетаи спейс (разстояние), а пред други не.

Може да пробваш, ако не ти се играе да разделяш нещата както трябва:

Код:
SELECT * FROM `catalog` FIND_IN_SET('$keyword' ,REPLACE(code, ', ', ',') ) <> 0
 
Fakeheal каза:
Нормализирай си базата данни.

Mysql е релационна база данни, може да се възползваш от това. :?:

PS: Това, че някои ги намира, а други не, може би идва от това, че имаш пред някои запетаи спейс (разстояние), а пред други не.

Може да пробваш, ако не ти се играе да разделяш нещата както трябва:

Код:
SELECT * FROM `catalog` FIND_IN_SET('$keyword' ,REPLACE(code, ', ', ',') ) <> 0

Много ми помогнахте. Благодаря много!
 

Горе