За последние 24 часа нас посетили 18450 программистов и 1604 робота. Сейчас ищет 961 программист ...

Если аргумент после LIKE указател на поле другой таблицы

Тема в разделе "MySQL", создана пользователем IceCream, 8 дек 2011.

  1. IceCream

    IceCream Активный пользователь

    С нами с:
    1 июл 2011
    Сообщения:
    27
    Симпатии:
    0
    В базе есть две таблицы.
    нужно вывести все данные из первой добавляя в массив значение одного из полей второй.
    Делаю такой запрос:
    Код (Text):
    1.  
    2. SELECT tab1.id, tab1.name, tab2.info
    3. FROM tab1, tab2
    4. WHERE tab1.id LIKE %tab2.id%
    5. LIMIT 0 , 30
    Почему LIKE а не =
    Дело в том, что tab2.id содержит не один id из первой а несколько разделённых запятой. Например 11,15,19

    Но именно из-за LIKE и пошли проблемы. Не хочет он ничего выбирать. При = всё идёт как надо.

    Как сформировать запрос так, чтобы он выводил нужную мне инфу?
     
  2. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    если делать правильно, то нужно переделывать структуру.
    а неправильных способов много, не все рабочие, не все устроят, не факт, что в дальнейшем не повторится похожая проблема
     
  3. alive342

    alive342 Активный пользователь

    С нами с:
    21 апр 2011
    Сообщения:
    137
    Симпатии:
    0
    Адрес:
    Российская Федерация
    1. открываем книгу и читаем про нормальные формы
    2. через IN можно попробовать
     
  4. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    IN ресурсоёмкая операция. а если поменять местами tab2.id LIKE %tab1.id% ??
    ведь tab2.id в списке может содержать %tab1.id%
     
  5. IceCream

    IceCream Активный пользователь

    С нами с:
    1 июл 2011
    Сообщения:
    27
    Симпатии:
    0
    Тут скорее вопрос поддержки старого чужого пока делается новое своё. Поэтому костыль и нужен ибо решать проблему ещё одним запросом в цикле вариант, на мой взгляд, не шибко лучший.
     
  6. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    IceCream

    условия: tab2.id содержит строку "14,15,16,24,32,36", tab1.id содержит число 5.

    вопрос: будет ли совпадение при like ?

    ответ: да, будет ложное совпадение.

    итог: не подходит.

    оптимальным решением на данный момент будет написание собственной хранимой функции поиска числа в строке
     
  7. IceCream

    IceCream Активный пользователь

    С нами с:
    1 июл 2011
    Сообщения:
    27
    Симпатии:
    0
    А если все числа 4хзначные и совпадений вида 5 и 15 в принципе быть не может?
     
  8. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    IceCream
    тогда, если (!) сумеешь прикрутить лайк между двух полей - будешь радоваться жизни. но что-то мне подсказывает, что это не так просто :)

    так что оптимальным (и более-менее правильным) вариантом остаётся хранимая функция