Mysql Выборка по условию из нескольких строк

  • Автор темы Автор темы Shasoft
  • Дата начала Дата начала

Shasoft

Новичок
Есть таблица
table.png

Нужно выбрать идентификаторы по условию, что есть строка с
key="k1" AND value="v1" AND key="k2" AND value="v2"
. В данном примере должен выбраться только идентификатор 1.
1. Как сформировать для этого правильный запрос?
2. Какие индексы лучше сделать для более шустрой работы?
3. Может есть специальные приемы для таких запросов?
 
а почему в таблице id повторяется, должен быть уникальным ...
 
4. А для чего вообще понадобилась такая таблица?
5. И выборка?
 
а почему в таблице id повторяется, должен быть уникальным ...
Это я не полностью таблицу нарисовал. Исправил таблицу. Поле uid - уникальный ключ. А выбрать нужно поле id. (Хотя в данной интерпретации смысла в наличии поля uid нет)

4. А для чего вообще понадобилась такая таблица?
5. И выборка?
Так планируется хранить ГИС информацию (как в OSM ссылка)
Т.е. будет таблица с атрибутами. И нужно выбрать идентификатор объекта, у которого атрибут1=значение1 [и атбрибут2=значение2 и ...]
 
Может кто-нибудь хоть намекнет, по каким терминам искать такие алгоритмы?
 
честно говоря, я не очень понимаю задачу.
и - заодно- проблему. приведённый здесь запрос не работает?
 
Никаких запросов приведено не было.
Суть вв следующем: нужно из таблицы выбрать идентификатор из поля id, для которого в таблице есть строка key='k1' AND value='v1' И также для этого этого же идентификатора имеется строка key='k2' AND value='v2'
В примере это идентификатор id = 1, т.к. в строке uid=1 есть key='k1' AND value='v1', а в строке uid=2 есть key='k2' AND value='v2'.

Так понятнее?
 
Ну еще бы он работал:
PHP:
key="k1" AND value="v1" AND key="k2" AND value="v2"
Shasoft, "И", "ИЛИ" -- какая разница, ведь и так должно быть понятно, да?
 
>>ведь и так должно быть
Нет. :)
Если вы посмотрите и подумайте, то поймете, что по условию
PHP:
SELECT * ... WHERE key="k1" AND value="v1" AND key="k2" AND value="v2"
никогда ничего не выберется.
 
поскольку это не реляционная БД, то я бы и не лез в нее SQL-ем.
сколько условиев - столько и запросов.
потом посмотреть на результаты.

но вообще мне такая структура не нравится.
 
ну или объединять пары через or и считать полученные id. если все одинаковые, и их число совпадает с количеством пар - то нашли.
если нет - то нет.
 
мне такая структура не нравится
Так я смогу динамически создавать нужные атрибуты и не менять при этом структуру БД.
ну или объединять пары через or и считать полученные id. если все одинаковые, и их число совпадает с количеством пар - то нашли.
если нет - то нет.
В общем в итоге я тоже нашел такой же вариант. Теперь нужно сделать реальную таблицу, нагенерить в неё данных и попробовать, что там будет со скоростью.
 
Да знаю я, что ты можешь. Этой технологии сто лет в обед.
Я не говорил, что ты не сможешь добавлять в эту структуру атрибуты. Я говорил, что она мне не нравится.
Два года мне приходится с ней работать и два года я не перестаю на нее материться.

Слава богу, потихоньку с нее переезжаем на монгу, которая как раз и предназначена для таких случаев.
Поиск, впрочем, всё равно делается через сфинкс. Это, кстати, к вопросу о скорости.
 
Теоретически можно ещё использовать FULLTEXT, но при таком подходе я пока не представляю, как сделать возможность поиска по маске значение атрибута.
 
фуллтекст - кака. не бери её. используй свинкс, если встанет вопрос производительности
 
При моих масштабах вопрос производительности встанет лет через 100 :)
 
На всякий случай. лучше сразу предусмотреть, чтобы потом не ломать много в случае чего.
 
Это у меня не стартап, а для души. Но за ссылку спасибо. Интересно почитать.
 
Сверху