|
|
|
| Требуется выбрать четкое соответствие из базы
SELECT * FROM doc_img_tag dit1 WHERE dit1.img_tag_id in (2,20,40) AND (SELECT count(*) FROM doc_img_tag dit2 WHERE dit2.doc_id = dit1.doc_id) = 3 ;
|
Проблема что этот код выбирает все соответствие в разных предствлениях тоесть он может найти 2, 30 , 52 или 2,20,56,73 итд .
Для уникальности на ум приходит только
SELECT *
FROM doc_data dd
WHERE EXISTS
(
SELECT *
FROM doc_img_tag dit11
WHERE dit11.img_tag_id = 2 and dit11.doc_id = dd.id) AND EXISTS
(
SELECT *
FROM doc_img_tag dit12
WHERE dit12.img_tag_id = 20 and dit12.doc_id = dd.id) AND
EXISTS
(
SELECT *
FROM doc_img_tag dit13
WHERE dit13.img_tag_id = 40 and dit13.doc_id = dd.id) AND (
SELECT COUNT(*)
FROM doc_img_tag dit2
WHERE dit2.doc_id = dd.id) = 5
LIMIT 100000;
|
Но это как то слишком громоздко , думается что есть способ попроще . Тем более что этот запрос является подзапросом другого запроса и работает на выборке в 1,5 лям | |
|
|
|
|
|
|
|
для: fire_f12
(13.11.2013 в 18:08)
| | Проблема в том, что мы тут понятия не имеем, что из себя представляет ваша таблица doc_img_tag и что в ней что из себя представляет. И даже образца данных нет.
Если хотите, могу предложить наугад:
SELECT DISTINCT * FROM doc_img_tag dit1 WHERE dit1.img_tag_id in (2,20,40) AND (SELECT count(*) FROM doc_img_tag dit2 WHERE dit2.doc_id = dit1.doc_id) = 3
| но не более того | |
|
|
|
|
|
|
|
для: Sfinks
(13.11.2013 в 21:27)
| | Таблица очень простая:
id ключ значение
Так сказать связывающее звено , в для одного ключа может быть от 1 до ~800 значений , нужно найти такие ключи которым соответствуют значения поиска и не какие другие . тоесть если заданы 2,20,40 то нужно найти ключи которым соответствую 2,20,40 и не какие другие . следующие значения не удовлетворяют поиск 1,2,20,40 2,20,40,56 | |
|
|
|
|
|
|
|
для: fire_f12
(14.11.2013 в 09:31)
| | Ага... Почти.
А id и ключ - это я так понимаю img_tag_id и doc_id. А кто из них кто?
И еще id - уникальное? | |
|
|
|
|
|
|
|
для: fire_f12
(14.11.2013 в 09:31)
| | Посмотрите вот эту тему: http://softtime.ru/forum/read.php?id_forum=3&id_theme=90415#post538127
На сколько я понял, вам нужно тоже самое, только там человек правильно и понятно сформулировал вопрос.
Если так, то у вас будет такой же запрос, только вместо будет | |
|
|
|