За последние 24 часа нас посетили 29883 программиста и 1484 робота. Сейчас ищет 1041 программист ...

MYSQL In Только AND

Тема в разделе "PHP для новичков", создана пользователем askanim, 27 дек 2016.

  1. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Что то мне совсем плохо...
    Ситуация такая есть одно поле по которому нужно делат выборку из нескольких поступающих значений, битвин не подходит так как он устанавливает диапазон значений внутри каких то двух. IN тоже не подходит так как он фильтрует как или эти значение и в результате если хоть одно удовлетворяет он пропускает. А у меня запрос аля
    Код (Text):
    1. SELECT idNomenclature FROM nomenclature_character WHERE idChar=6 AND idChar=15 AND idChar=19
    только я не знаю как написать его правильно
    --- Добавлено ---
    Спасите кто нибудь :D (Пожалуйста)
     
  2. SamyRed

    SamyRed Старожил

    С нами с:
    23 июл 2015
    Сообщения:
    1.196
    Симпатии:
    111
    Адрес:
    Украина
    А как в одной строке один столбец может принимать 3 разных значения? Или это разные строки? Тогда я не пойму почему IN не подходит.
     
  3. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Стоп или я залагал.... Кажись я пересидел за компом и котелок перегрелся
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    таблицу можно джоинить на саму себя
     
    askanim нравится это.
  5. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata Спасибо за наводку. Пойду думать.
    --- Добавлено ---
    Я понял я составил не верный алгоритм. в результате я запутал сам себя пойду переосмысливать идею.
     
  6. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @askanim ты совершаешь "ошибку молотка". вместо того, чтобы спросить "как мне разобраться с задачей" ты предполагаешь некое решение и спрашиваешь "а как мне провернуть это решение". А т.к. ты выдумал какую-то хуйню, тебе никто не может помочь.
    Лучше изложи саму проблему.

    http://meta.ru.stackoverflow.com/a/710/176610
     
  7. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Подскажите плиз как сделать в этом запросе WHERE по сумме
    Код (Text):
    1. SELECT
    2.   `idNomenclature`,
    3.   SUM(`idChar`) As char_sum
    4. FROM
    5.   `nomenclature_character`
    6. GROUP BY
    7.     `idNomenclature`
    --- Добавлено ---
    Или это нужно это как то класть во временную таблицу? А потом уже искать по временной таблице?
    --- Добавлено ---
    @artoodetoo
    У меня три таблицы. В одной номенклатура. В другой её характеристики. А в третей идёт их соединение таким образом
    id - поле автоинкремент
    idNomenclature - айди самой номенклатуры
    idChar - айди характеристики

    Суть в том что при выборе характеристик на сайте должны учитываться все выбраные, а не каждой отдельно. Отсюда и вопрос получая в посте запрос я обращаюсь к последней таблице имtя на руках айди хар-ик. И как мне быть дальше. Я придумал что делать сгрупировать последнею таблицу по полю idNomenclature и id чар просумировать. и выбрать по сумме id так как она из поста придёт одинаковая и выбрать все idNomenclature у которых будет соответствующая сумма идентификаторов. Должно сработать но как связать запрос в душе не чаю :(
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    условие по сумме это фулскан. ты понимаешь, что это значит? =) с твоими-то таблицами.
     
  9. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata Да я вполне уверен. В этом решении. Он мне по группиорваному полю сложит мне все idChar, Хотя не уверен. А если придёт в посте не все значения то общей суммы не будет... И что тогда делать? :D Балин это жопка какая то с ручкой
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда просто пиши where char_sum > 3 и всё
     
  11. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @igordata неа значение точное должно быть на фильтрацию и я уже не уверен. Блин подскажи в каком направлении думать...
    --- Добавлено ---
    @igordata пожалуйста
     
  12. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Буквально с такой структурой, как у тебя, нужно несколько раз join делать твоей третьей таблицей, для каждого условия по join (с разными алиасами). Т.е. если условий 5 - 5 join-ов с ней. Может достаточно медленно работать, но возможно можно ускорить с помощью индексов (не пробовал, зато в жопу из-за таких join-ов попадал). Если у тебя MySQL 5.7 или MariaDB, можно попробовать с помощью json-полей, по которым они умеют делать выборки. Я когда в последний раз решал, мне MySQL 5.7 был недоступен, я подключил ещё Sphinx и в нём тоже использовал его json-поля
     
    askanim нравится это.
  13. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    1. id здесь просто не нужен ))) естественный ключь будет составной из двух других полей

    вот это почитай. не уверен, что поймёшь и сумеешь передложить на свои таблицы, но это как раз твоя задача: поиск совпадения всех атрибутов. http://ru.stackoverflow.com/q/598349/176610
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я вообще не понимаю задачу
     
  15. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    @askanim, в одно сравнение (как ты предположил со своим фантастическим in+and) сделать такое невозможно. потому что мы имеем дело со множеством записей, а не с одной.

    нужно найти все совпадения атрибутов и посчитать количество этих совпадений.
    нас интересует только тот случай, когда количество сопадений равно общему количеству атрибутов.
    --- Добавлено ---
    @igordata это entity-attribute-value модель.
     
  16. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    ААА Всё я близок к цели вот мне это нужно
    Код (Text):
    1. SELECT
    2.   tb2.idNomenclature,
    3.   tb1.idNomenclature,
    4.   tb3.idNomenclature,
    5.   tb1.idChar,
    6.   tb2.idChar,
    7.   tb3.idChar
    8. FROM
    9.   `nomenclature_character` As tb2
    10. LEFT JOIN
    11.     `nomenclature_character` As tb1
    12.     ON tb2.idNomenclature = tb1.idNomenclature
    13. LEFT JOIN
    14.     `nomenclature_character` As tb3
    15.     ON tb2.idNomenclature = tb3.idNomenclature
    16. WHERE tb1.idChar = 6 AND tb2.idChar = 16 AND tb3.idChar = 19
     
  17. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    [censored]"№$#[/censored] !11
    продолжай пытаться
     
  18. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
  19. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    ну я уже объяснил как мог
     
  20. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @artoodetoo оно сработало. Так почему же я тупой. Объясните где не прав или почему так нельзя делать.
    --- Добавлено ---
    @artoodetoo я почитал ваши сообщения и заглянул по ссылке вами данной.
    --- Добавлено ---
    @artoodetoo это не совсем то что мне нужно.
    --- Добавлено ---
    @igordata я запустил стрим зайди объясню.
     
  21. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    окей окей. сделай закладочку и возвращайся сюда когда зайдешь в тупик.
     
  22. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @artoodetoo согласен первое поле id в совмещающей таблицы не нужно вообще создано просто так. Чтобы в phpmyadmin было проще ориентироваться мне.
    Мне нужны поля idNomenclature по которому можно сгруппировать. А так же то что мне нужно это поле idChar значения котого я имею на руках чтобы фильтровать и отсекать не нужные строки в таблице. Так вот У меня на сайте есть форма поиска по номенклатуре. И в ней можно указывать разные значения которые несут в себе idСhar хар-ки по которой я найду id номенклатуры чтобы выбрать её из общей таблицы. Такие вот дела.
    --- Добавлено ---
    Изначально первый кто что-то подсказал это был Игорь и я думал об этом и пока писал джоины вспомнил про гроуп бай но он как оказалось не подошёл мне. Я не знаю как объяснить. Мне бы проще было показать. но кнопки скрин шот на клаве нету.
    --- Добавлено ---
    Короче на трансляцию никто не зашёл. Я её вырубил.
     
  23. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    sqlfiddle.com лучше всякой картинки
     
  24. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    @artoodetoo как я вам там наглядно покажу? Я и так вам запросы кидал.
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    наглядно я сам сделаю, если ты создашь таблицы и заполнишщь их рабочими данными.
    не заставляй других что-то додумывать за тебя, сделай сам. а мы уже поиграем с этими данными как сумеем.