Автор Тема: MySQL КВН для самых умных. Помогите!  (Прочитано 2707 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн a@mail.dux.ru

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 105
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL КВН для самых умных. Помогите!
« : 27 Октября 2003, 00:44:07 »
Ситуевина такая:
у меня есть в MySQL
1) поле list (в таблице t1) в нем данные (например): 1,2,3,4,11
2) поле idN (в таблице t2) в нем данные (например): 1

мне нужно
select * from t1,t2 where t2.id in (list)
но так не работает
делаю вокруг:
select * from t1,t2 where instr(list  , idN )
Так работает, НО! не правильно потому как 1 попадает и в 1 и в 11
пытался написать
select * from t1,t2 where instr(\',list,\'  , \',idN,\' )
Эта Идея понятна? я хочу представить данные из поля \'list\' как
,1,2,3,4,11, а не так как они там представлены 1,2,3,4,11 (запятые по бокам добавил. то есть)

Но так MySQL понимает что я хочу искать в тексте \',list,\'  а не в поле list

Естественно смотрел доку по instr но там все лаконично:
INSTR(str,substr)

Помогите, плиз,  кто сможет. :)
Может есть и изящнее подход , а я его не вижу?
спасибо

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL КВН для самых умных. Помогите!
« Ответ #1 : 27 Октября 2003, 06:57:36 »
тебе обязательно это делать средствами mysql, в консоли?
руками сформировать с нужными запятыми не получается?

есть и более изящный подход. тип поля set

Оффлайн a@mail.dux.ru

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 105
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL КВН для самых умных. Помогите!
« Ответ #2 : 27 Октября 2003, 15:12:40 »
предолжение хорошее, только я не буду знать, что содержиться в поле list . если специально не залезу в базу. :(

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
MySQL КВН для самых умных. Помогите!
« Ответ #3 : 27 Октября 2003, 22:40:07 »
a@mail.dux.ru
проблему можно решить через REGEXP, примерно так:
SELECT ... WHERE list REGEXP concat(\'[[:<:]]\',idn,\'[[:>:]]\');


но это будет тормозить на больших объемах, так что пересмотри структуру своей БД
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн a@mail.dux.ru

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 105
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL КВН для самых умных. Помогите!
« Ответ #4 : 02 Декабря 2003, 04:30:50 »
Спасибо за подсказку . сделал вот так:

select * from t1,t2 where instr(\',list,\' ,concat(\',\',$idN,\',\') )

а в таблице 1 в поле, откуда берется list пришлось в начале и в конце данных прибавить по ",0"

то есть согласно моего примера (п.1) стало 0,1,2,3,4,11,0

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28