Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

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

 

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

Featured Replies

Здравейте,

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

  • 3 месеца по-късно...

Ако разбирам правилно въпроса ти, то трябва като въведеш 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

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

преди 10 минути, pix3l написа:

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

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

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

 

преди 8 минути, capnemo написа:

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


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

 

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

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

 

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 (преглед на промените)

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.