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

Shasoft

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

Нужно выбрать идентификаторы по условию, что есть строка с
key="k1" AND value="v1" AND key="k2" AND value="v2"
. В данном примере должен выбраться только идентификатор 1.
1. Как сформировать для этого правильный запрос?
2. Какие индексы лучше сделать для более шустрой работы?
3. Может есть специальные приемы для таких запросов?
 

Semen

Семён
а почему в таблице id повторяется, должен быть уникальным ...
 

Фанат

oncle terrible
Команда форума
4. А для чего вообще понадобилась такая таблица?
5. И выборка?
 

Shasoft

Новичок
а почему в таблице id повторяется, должен быть уникальным ...
Это я не полностью таблицу нарисовал. Исправил таблицу. Поле uid - уникальный ключ. А выбрать нужно поле id. (Хотя в данной интерпретации смысла в наличии поля uid нет)

4. А для чего вообще понадобилась такая таблица?
5. И выборка?
Так планируется хранить ГИС информацию (как в OSM ссылка)
Т.е. будет таблица с атрибутами. И нужно выбрать идентификатор объекта, у которого атрибут1=значение1 [и атбрибут2=значение2 и ...]
 

Shasoft

Новичок
Может кто-нибудь хоть намекнет, по каким терминам искать такие алгоритмы?
 

Фанат

oncle terrible
Команда форума
честно говоря, я не очень понимаю задачу.
и - заодно- проблему. приведённый здесь запрос не работает?
 

Shasoft

Новичок
Никаких запросов приведено не было.
Суть вв следующем: нужно из таблицы выбрать идентификатор из поля 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, "И", "ИЛИ" -- какая разница, ведь и так должно быть понятно, да?
 

Shasoft

Новичок
>>ведь и так должно быть
Нет. :)
Если вы посмотрите и подумайте, то поймете, что по условию
PHP:
SELECT * ... WHERE key="k1" AND value="v1" AND key="k2" AND value="v2"
никогда ничего не выберется.
 

Фанат

oncle terrible
Команда форума
поскольку это не реляционная БД, то я бы и не лез в нее SQL-ем.
сколько условиев - столько и запросов.
потом посмотреть на результаты.

но вообще мне такая структура не нравится.
 

Фанат

oncle terrible
Команда форума
ну или объединять пары через or и считать полученные id. если все одинаковые, и их число совпадает с количеством пар - то нашли.
если нет - то нет.
 

Shasoft

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

Фанат

oncle terrible
Команда форума
Да знаю я, что ты можешь. Этой технологии сто лет в обед.
Я не говорил, что ты не сможешь добавлять в эту структуру атрибуты. Я говорил, что она мне не нравится.
Два года мне приходится с ней работать и два года я не перестаю на нее материться.

Слава богу, потихоньку с нее переезжаем на монгу, которая как раз и предназначена для таких случаев.
Поиск, впрочем, всё равно делается через сфинкс. Это, кстати, к вопросу о скорости.
 

Shasoft

Новичок
Теоретически можно ещё использовать FULLTEXT, но при таком подходе я пока не представляю, как сделать возможность поиска по маске значение атрибута.
 

Фанат

oncle terrible
Команда форума
фуллтекст - кака. не бери её. используй свинкс, если встанет вопрос производительности
 

Shasoft

Новичок
При моих масштабах вопрос производительности встанет лет через 100 :)
 

Shasoft

Новичок
На всякий случай. лучше сразу предусмотреть, чтобы потом не ломать много в случае чего.
 

Shasoft

Новичок
Это у меня не стартап, а для души. Но за ссылку спасибо. Интересно почитать.
 
Сверху