- Търсене в БД?
WT форуми -> PHP MySQL ASP.NET -> Търсене в БД?
Създайте нова тема Напишете отговор 
Автор Съобщение
confiscate
Турист
Турист

Регистриран на: 27/01/2007 8:45 am

Support: 10
Bonus: 15
Мнения: 536
Мнение 20/03/2017 4:12 pm     Търсене в БД? Отговорете с цитат


Здравейте,

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

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

Поздрави Smile
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 20/03/2017 4:17 pm     Re: Търсене в БД? Отговорете с цитат


confiscate написа:
Здравейте,

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

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

Поздрави Smile

Използвай exact match.. вместо wildcards %term% -> 'term'
Това ще върне само, което съдържа 'BLA'
SELECT  *
FROM    table
WHERE   column = 'BLA'

Това ще върне всичко, което започва с 'BLA'
SELECT  *
FROM    table
WHERE   column = %BLA%
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
confiscate
Турист
Турист

Регистриран на: 27/01/2007 8:45 am

Support: 10
Bonus: 15
Мнения: 536
Мнение 20/03/2017 4:26 pm      Отговорете с цитат


А ако имам повече от един код, тогава май няма да стане по този начин. Повече от един код визирам по тзои начин: 4000, 4000А, 4010B. В един ред.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
vinsbg
Редовен
Редовен

Регистриран на: 28/01/2009 2:21 pm

Support: 50
Bonus: 86
Мнения: 2553
Мнение 20/03/2017 4:33 pm      Отговорете с цитат


confiscate написа:
А ако имам повече от един код, тогава май няма да стане по този начин. Повече от един код визирам по тзои начин: 4000, 4000А, 4010B. В един ред.

Функция FIND_IN_SET може би ще помогне
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
confiscate
Турист
Турист

Регистриран на: 27/01/2007 8:45 am

Support: 10
Bonus: 15
Мнения: 536
Мнение 20/03/2017 5:44 pm      Отговорете с цитат


vinsbg написа:
confiscate написа:
А ако имам повече от един код, тогава май няма да стане по този начин. Повече от един код визирам по тзои начин: 4000, 4000А, 4010B. В един ред.

Функция FIND_IN_SET може би ще помогне


Ето ми БД Търсене в БД?

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


Интересното е, че някои ги намира, но други изобщо неще. Например ако напиша 4700Е2 изобщо не го намира. Къде може да бъркам ? Sad
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Fakeheal
Support
Support

Регистриран на: 17/04/2010 8:37 am

Support: 339
Bonus: 676
Мнения: 2549
Мнение 20/03/2017 7:19 pm      Отговорете с цитат


Нормализирай си базата данни.

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

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

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

SELECT * FROM `catalog` FIND_IN_SET('$keyword' ,REPLACE(code, ', ', ',') ) <> 0
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Изпрати мейла
confiscate
Турист
Турист

Регистриран на: 27/01/2007 8:45 am

Support: 10
Bonus: 15
Мнения: 536
Мнение 20/03/2017 8:07 pm      Отговорете с цитат


Fakeheal написа:
Нормализирай си базата данни.

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

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

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

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


Много ми помогнахте. Благодаря много!
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети