Что то мне совсем плохо... Ситуация такая есть одно поле по которому нужно делат выборку из нескольких поступающих значений, битвин не подходит так как он устанавливает диапазон значений внутри каких то двух. IN тоже не подходит так как он фильтрует как или эти значение и в результате если хоть одно удовлетворяет он пропускает. А у меня запрос аля Код (Text): SELECT idNomenclature FROM nomenclature_character WHERE idChar=6 AND idChar=15 AND idChar=19 только я не знаю как написать его правильно --- Добавлено --- Спасите кто нибудь (Пожалуйста)
А как в одной строке один столбец может принимать 3 разных значения? Или это разные строки? Тогда я не пойму почему IN не подходит.
@igordata Спасибо за наводку. Пойду думать. --- Добавлено --- Я понял я составил не верный алгоритм. в результате я запутал сам себя пойду переосмысливать идею.
@askanim ты совершаешь "ошибку молотка". вместо того, чтобы спросить "как мне разобраться с задачей" ты предполагаешь некое решение и спрашиваешь "а как мне провернуть это решение". А т.к. ты выдумал какую-то хуйню, тебе никто не может помочь. Лучше изложи саму проблему. http://meta.ru.stackoverflow.com/a/710/176610
Подскажите плиз как сделать в этом запросе WHERE по сумме Код (Text): SELECT `idNomenclature`, SUM(`idChar`) As char_sum FROM `nomenclature_character` GROUP BY `idNomenclature` --- Добавлено --- Или это нужно это как то класть во временную таблицу? А потом уже искать по временной таблице? --- Добавлено --- @artoodetoo У меня три таблицы. В одной номенклатура. В другой её характеристики. А в третей идёт их соединение таким образом id - поле автоинкремент idNomenclature - айди самой номенклатуры idChar - айди характеристики Суть в том что при выборе характеристик на сайте должны учитываться все выбраные, а не каждой отдельно. Отсюда и вопрос получая в посте запрос я обращаюсь к последней таблице имtя на руках айди хар-ик. И как мне быть дальше. Я придумал что делать сгрупировать последнею таблицу по полю idNomenclature и id чар просумировать. и выбрать по сумме id так как она из поста придёт одинаковая и выбрать все idNomenclature у которых будет соответствующая сумма идентификаторов. Должно сработать но как связать запрос в душе не чаю
@igordata Да я вполне уверен. В этом решении. Он мне по группиорваному полю сложит мне все idChar, Хотя не уверен. А если придёт в посте не все значения то общей суммы не будет... И что тогда делать? Балин это жопка какая то с ручкой
@igordata неа значение точное должно быть на фильтрацию и я уже не уверен. Блин подскажи в каком направлении думать... --- Добавлено --- @igordata пожалуйста
Буквально с такой структурой, как у тебя, нужно несколько раз join делать твоей третьей таблицей, для каждого условия по join (с разными алиасами). Т.е. если условий 5 - 5 join-ов с ней. Может достаточно медленно работать, но возможно можно ускорить с помощью индексов (не пробовал, зато в жопу из-за таких join-ов попадал). Если у тебя MySQL 5.7 или MariaDB, можно попробовать с помощью json-полей, по которым они умеют делать выборки. Я когда в последний раз решал, мне MySQL 5.7 был недоступен, я подключил ещё Sphinx и в нём тоже использовал его json-поля
1. id здесь просто не нужен ))) естественный ключь будет составной из двух других полей вот это почитай. не уверен, что поймёшь и сумеешь передложить на свои таблицы, но это как раз твоя задача: поиск совпадения всех атрибутов. http://ru.stackoverflow.com/q/598349/176610
@askanim, в одно сравнение (как ты предположил со своим фантастическим in+and) сделать такое невозможно. потому что мы имеем дело со множеством записей, а не с одной. нужно найти все совпадения атрибутов и посчитать количество этих совпадений. нас интересует только тот случай, когда количество сопадений равно общему количеству атрибутов. --- Добавлено --- @igordata это entity-attribute-value модель.
ААА Всё я близок к цели вот мне это нужно Код (Text): SELECT tb2.idNomenclature, tb1.idNomenclature, tb3.idNomenclature, tb1.idChar, tb2.idChar, tb3.idChar FROM `nomenclature_character` As tb2 LEFT JOIN `nomenclature_character` As tb1 ON tb2.idNomenclature = tb1.idNomenclature LEFT JOIN `nomenclature_character` As tb3 ON tb2.idNomenclature = tb3.idNomenclature WHERE tb1.idChar = 6 AND tb2.idChar = 16 AND tb3.idChar = 19
@artoodetoo оно сработало. Так почему же я тупой. Объясните где не прав или почему так нельзя делать. --- Добавлено --- @artoodetoo я почитал ваши сообщения и заглянул по ссылке вами данной. --- Добавлено --- @artoodetoo это не совсем то что мне нужно. --- Добавлено --- @igordata я запустил стрим зайди объясню.
@artoodetoo согласен первое поле id в совмещающей таблицы не нужно вообще создано просто так. Чтобы в phpmyadmin было проще ориентироваться мне. Мне нужны поля idNomenclature по которому можно сгруппировать. А так же то что мне нужно это поле idChar значения котого я имею на руках чтобы фильтровать и отсекать не нужные строки в таблице. Так вот У меня на сайте есть форма поиска по номенклатуре. И в ней можно указывать разные значения которые несут в себе idСhar хар-ки по которой я найду id номенклатуры чтобы выбрать её из общей таблицы. Такие вот дела. --- Добавлено --- Изначально первый кто что-то подсказал это был Игорь и я думал об этом и пока писал джоины вспомнил про гроуп бай но он как оказалось не подошёл мне. Я не знаю как объяснить. Мне бы проще было показать. но кнопки скрин шот на клаве нету. --- Добавлено --- Короче на трансляцию никто не зашёл. Я её вырубил.
наглядно я сам сделаю, если ты создашь таблицы и заполнишщь их рабочими данными. не заставляй других что-то додумывать за тебя, сделай сам. а мы уже поиграем с этими данными как сумеем.