Старый 30.04.2008, 23:38   #1
Специалист
 
Аватар для Dreamer.rus
 
Регистрация: 08.03.2008
Сообщений: 246
Вес репутации: 158
Dreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючек
По умолчанию Знатоки 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'

Кто-нибудь знает, как это можно победить?
Dreamer.rus вне форума   Ответить с цитированием
Старый 01.05.2008, 00:31   #2
Новичок
 
Аватар для vvvvv
 
Регистрация: 08.05.2007
Сообщений: 60
Вес репутации: 168
vvvvv - это имя известно всемvvvvv - это имя известно всемvvvvv - это имя известно всемvvvvv - это имя известно всемvvvvv - это имя известно всемvvvvv - это имя известно всем
По умолчанию

Попробуйте слэши поставить перед %
\%forum.forumid\%
vvvvv вне форума   Ответить с цитированием
Старый 01.05.2008, 00:48   #3
Специалист
 
Аватар для Dreamer.rus
 
Регистрация: 08.03.2008
Сообщений: 246
Вес репутации: 158
Dreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючек
По умолчанию

Цитата:
Сообщение от vvvvv Посмотреть сообщение
Попробуйте слэши поставить перед %
\%forum.forumid\%
Нифига. Вся проблема, в том, что если ставить % без кавычек, то вываливается в ошибку синтаксиса, а ставишь кавычки, аргумент тупо превращается в константу. Замкнутый круг, блин...
Dreamer.rus вне форума   Ответить с цитированием
Старый 01.05.2008, 01:24   #4
Специалист
 
Аватар для tpnetman
 
Регистрация: 16.06.2007
Адрес: Essen, Germany
Сообщений: 105
Вес репутации: 163
tpnetman - весьма и весьма положительная личностьtpnetman - весьма и весьма положительная личность
По умолчанию

ИМХО с вашей конструкцией таблицы одним запросом не обойти
tpnetman вне форума   Ответить с цитированием
Старый 01.05.2008, 07:57   #5
Специалист
 
Аватар для Kashey
 
Регистрация: 02.07.2007
Сообщений: 453
Вес репутации: 171
Kashey - очень-очень хороший человекKashey - очень-очень хороший человекKashey - очень-очень хороший человекKashey - очень-очень хороший человек
По умолчанию

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

А вообще заведите себе таблицу парентов, или чилдов.
таакая километровая кишка матчей, кто у кого чил, и кто у кого парент.
Работает быстрее( потому что это не строка, это число) и гемора меньше
__________________
Нужны новости? - На скане полмиллиона новостей. Всяко разных.
И как всегда это все ScanLog записывает
Kashey вне форума   Ответить с цитированием
Старый 01.05.2008, 08:12   #6
Мастер
 
Аватар для lay
 
Регистрация: 11.08.2007
Сообщений: 705
Вес репутации: 187
lay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущееlay - прекрасное будущее
По умолчанию

а почему используете LIKE, а не строгое равенство?
lay вне форума   Ответить с цитированием
Старый 01.05.2008, 08:48   #7
Специалист
 
Аватар для Kashey
 
Регистрация: 02.07.2007
Сообщений: 453
Вес репутации: 171
Kashey - очень-очень хороший человекKashey - очень-очень хороший человекKashey - очень-очень хороший человекKashey - очень-очень хороший человек
По умолчанию

вы не в теме
оператор % тока в лайке
__________________
Нужны новости? - На скане полмиллиона новостей. Всяко разных.
И как всегда это все ScanLog записывает
Kashey вне форума   Ответить с цитированием
Старый 01.05.2008, 10:00   #8
Специалист
 
Аватар для Dreamer.rus
 
Регистрация: 08.03.2008
Сообщений: 246
Вес репутации: 158
Dreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючекDreamer.rus - как роза среди колючек
По умолчанию

Цитата:
Сообщение от Kashey Посмотреть сообщение
like CONCAT('%',forum.forumid,'%') и фсе

Спасибо огромное, работает замечательно. Понимал, что "истина где-то рядом" , а вот про CONCAT не додумался.
Dreamer.rus вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с Mysql Crudelis Курилка 46 02.07.2008 02:54
Есть знатоки WordPress? Можно сделать вертикальное выпадающее меню? XAOC Курилка 4 23.06.2008 09:21
Совсем хитрый вопрос про MySQL Kashey Разработка и сопровождение сайтов 2 13.11.2007 10:51
Репликация в MySQL Kashey Разработка и сопровождение сайтов 1 20.10.2007 22:57


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