Премини към съдържанието
streleca_stz

Търсене на най-близки резултати според дадена променлива

Препоръчан отговор


Здравейте,

Имам един проблем - при преглед на резултат искам да показвам допълнителни резултати. В случая имам колона tags, която за всеки резултат записва номерата на избраните тагове при неготово добавяне - например за запис 1 има tags = "1,5,16,20". Та искам да попитам как бих могъл при заявката да правя сравнени с останалите записи и да показва резултати със съвпадащи (не да са 1:1 съвпадащи) тагове?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Гост

Ако разбирам правилно въпроса ти, то трябва като въведеш 1 да ти излизат примерно всички неща от колоната които съдържат 1 (вид търсачка).

// MySQL заявката трябва да изглежда по следния начин

mysql_query("SELECT * FROM table WHERE column LIKE '%$promenliva%'");

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 5 минути, Hornx написа:

Ако разбирам правилно въпроса ти, то трябва като въведеш 1 да ти излизат примерно всички неща от колоната които съдържат 1 (вид търсачка).


// MySQL заявката трябва да изглежда по следния начин

mysql_query("SELECT * FROM table WHERE column LIKE '%$promenliva%'");

 

Това няма да работи. Like клаузата работи със стрингове и не можете да използвате wildcard!

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 час, capnemo написа:

Това няма да работи. Like клаузата работи със стрингове и не можете да използвате wildcard!

 

 

 

Цитат

 

 With LIKE you can use the following two wildcard characters in the pattern:

    % matches any number of characters, even zero characters.

    _ matches exactly one character.


 

Оттук : http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html

 

Число, поставено в кавички, какво е ?  Не е ли стринг ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 минута, Ken написа:

 

 

 

Оттук : http://dev.mysql.com/doc/refman/5.7/en/string-comparison-functions.html

 

Число, поставено в кавички, какво е ?  Не е ли стринг ?

Не, не е. За да стане стринг трябва да се превърне в такъв тип


Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 минута, capnemo написа:

Не, не е. За да стане стринг трябва да се превърне в такъв тип

Удобно не забеляза wildcard или ... ?

Вземи и пробвай щом не вярваш, дали like работи по дадения начин и тогава пиши пак.

Аман от "експерти" !

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 минута, Ken написа:

Удобно не забеляза wildcard или ... ?

Wildcard не работят (с like) когато се сравнява число. Писал съм го по-горе, не четеш ли? Или пак почваш стария навик да пишеш във този форум за да се заяждаш?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 10 минути, capnemo написа:

Wildcard не работят (с like) когато се сравнява число. Писал съм го по-горе, не четеш ли? Или пак почваш стария навик да пишеш във този форум за да се заяждаш?

Не само че чета, но и пробвам.
За разлика от теб.

LIKE работи само със стрингове.

Редактирано от Ken (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 1 минута, Ken написа:

Не само, че чета но и пробвам.
За разлика от теб.

LIKE работи само със стрингове.

Аз какво съм написал? Я се върни горе и прочети отново!!! И дали like работи с числа и как зависи от базата, при MsSQL е едно, при Оракъл е друго

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 2 минути, capnemo написа:

Аз какво съм написал? Я се върни горе и прочети отново!!! И дали like работи с числа и как зависи от базата, при MsSQL е едно, при Оракъл е друго

Я първо ти се върни горе и прочети за кое си написал, че няма да работи.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Тая колона с име "tags" винаги ще връща стрингов резултат, щом държи данни, изглеждащи така... "1,5,16,20" :D

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така е, но и MySQL и MSSQL правят вътрешно преобразуване и без проблем обработват числови стойности с LIKE. Дори някак използват и wildcards.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

В интерес на истината, не съм попадал в толкова екзотична ситуация, където трябва да използвам LIKE с числови стойности и нямам идея, дали ще се получи.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 10 минути, pix3l написа:

В интерес на истината, не съм попадал в толкова екзотична ситуация, където трябва да използвам LIKE с числови стойности и нямам идея, дали ще се получи.

Да не говорим че в много случаи ще даде грешни резултати. Примерно

like "%1%" от "10,20,30,40"

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
преди 8 минути, capnemo написа:

Да не говорим че в много случаи ще даде грешни резултати. Примерно


like "%1%" от "10,20,30,40"

 

Съгласен съм. И аз не виждам логика да се използва LIKE за числови стойности.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Разкарай тази колона, в която пазиш записите по този начин. Направи си още една таблица за релация много към много за тагове към записите. От там нататък е тривиално ...

 

objects
------------
id | name

 

tags
----------------
id | name

 

objects_tags
------------------------
id | id_object | id_tag

 

SELECT 
    o.name, t.name
FROM
    objects o
    LEFT JOIN objects_tags ot ON ot.id_object = o.id
    LEFT JOIN tags t ON t.id = ot.id_tag

 

p.s Имаш някакъв вариант да ползваш и FIND_IN_SET(), обаче решението не е ОК, понеже не ползва индексите и търсенето е бавно (поне така беше преди, не знам дали са бутали оптимизатора).

 

p.s @streleca_stz Предполагам разбра по начина който ти написах как ще стане това което искаш нали ... като имаш таблица, която ти описва релациите можеш да правиш селекти по нея ...

примерно искам всички обекти с тагове които съдържат тагове 1,3,5 

SELECT
	o.*
FROM objects_tags ot
JOIN objects o ON o.id = ot.object
WHERE ot.id_tag IN (1,3,5)

... или нещо от този сорт ...

Редактирано от borovaka (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.