Форум SAPE.RU

Форум SAPE.RU (http://forum.sape.ru/index.php)
-   Разработка и сопровождение сайтов (http://forum.sape.ru/forumdisplay.php?f=29)
-   -   Знатоки MySQL помогите. (http://forum.sape.ru/showthread.php?t=12367)

Dreamer.rus 30.04.2008 23:38

Знатоки MySQL помогите.
 
Все привет.

1.Есть одно поле в таблице, содержащие несколько значений через запятую.
К примеру: forum.childlist (1,2,3,4,5)
2. Есть второе поле, содержащие одно значение.
К примеру forum.forumid (3)
3. Есть 3-е поле, содержащее строку
К примеру forum.title ('строка')
Мне нужно выбрать строку из 3-го поля с условием, что в первое поле содержит значение из 2-го поля.

Зная значение во втором поле, легко определить есть ли оно в первом поле или нет
Допустим, forum.forumid = 3, тогда:

SELECT forum.title FROM forum WHERE forum.childlist LIKE '%3%'

И все замечательно работает. Но возникла засада, когда это значение, заранее неизвестно и вычисляется в самом запросе, то есть аргументом LIKE является не константа, а возвращаемое из запроса значение этого поля

SELECT forum.title FROM forum WHERE forum.childlist LIKE forum.forumid

Этот вариант, работает, но без %, не ищет совпадения по всем значениям первого поля, а конструкция LIKE '%forum.forumid%' сразу превращает аргумент в константу и пытается найти уже именно строку 'forum.forumid'

Кто-нибудь знает, как это можно победить?

vvvvv 01.05.2008 00:31

Попробуйте слэши поставить перед %
\%forum.forumid\%

Dreamer.rus 01.05.2008 00:48

Цитата:

Сообщение от vvvvv (Сообщение 142199)
Попробуйте слэши поставить перед %
\%forum.forumid\%

Нифига. Вся проблема, в том, что если ставить % без кавычек, то вываливается в ошибку синтаксиса, а ставишь кавычки, аргумент тупо превращается в константу. Замкнутый круг, блин...

tpnetman 01.05.2008 01:24

ИМХО с вашей конструкцией таблицы одним запросом не обойти

Kashey 01.05.2008 07:57

like CONCAT('%',forum.forumid,'%') и фсе :)
А вообще запрос не верен, надо искать
like CONCAT('%,',forum.forumid,',%') - экранировать запятыми. и не забыть в данных хранить первую и последнюю запятую.
Иначе не сможете работать более чем с 9тью форумами..

А вообще заведите себе таблицу парентов, или чилдов.
таакая километровая кишка матчей, кто у кого чил, и кто у кого парент.
Работает быстрее( потому что это не строка, это число) и гемора меньше

lay 01.05.2008 08:12

а почему используете LIKE, а не строгое равенство?

Kashey 01.05.2008 08:48

вы не в теме
оператор % тока в лайке

Dreamer.rus 01.05.2008 10:00

Цитата:

Сообщение от Kashey (Сообщение 142338)
like CONCAT('%',forum.forumid,'%') и фсе :)


Спасибо огромное, работает замечательно. Понимал, что "истина где-то рядом" :) , а вот про CONCAT не додумался.


Часовой пояс GMT +3, время: 13:56.

Работает на vBulletin® версия 3.8.7.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
SAPE.RU — система купли-продажи ссылок с главных и внутренних страниц сайтов.