|
|
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
table1 id name 1 'bla bla bla' 2 'bla2 bla2 bla2' table2 id, on_id, tag_key, val 1 1 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська' 2 1 '345805b88b9ca1e189fa11ea817e5666' 'ФО' 3 2 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська' 4 2 '345805b88b9ca1e189fa11ea817e5666' 'ФА' SELECT `table1` . * FROM (`table1`) LEFT JOIN `table2` ON `table2`.`on_id` = `table1`.`id` WHERE( (`table2`.`tag_key` = '543dc43df3cf5aea67cf59650142ae36' AND `table2`.`val` IN('Полтавська')) AND (`table2`.`tag_key` = '345805b88b9ca1e189fa11ea817e5666' AND `table2`.`val` IN('ФО')) ) этот кусок не срабатывает, помогите пожалуйста. не срабатывает из за того что `tag_key` = '543dc43df3cf5aea67cf59650142ae36' и `tag_key` = '345805b88b9ca1e189fa11ea817e5666' а мне надо выбрать где именно совпадают эти 2 строки к одному результату. как быть ? тоесть мне в результате должна получится только 2 строка с таблици table1 id: 1 P.S. извините за несовсем понятное обьяснение, я старался как мог ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:48:25 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
smalaэтот кусок не срабатываетПотому что вы пытаетесь найти записи, в которых одновременно `tag_key` = '543dc43df3cf5aea67cf59650142ae36' И `tag_key` = '345805b88b9ca1e189fa11ea817e5666' Буквально сегодня похожая тема была, почитайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:51:29 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
это я понял, я прошу решения как быть в таком случае если мне надо так выбрать, а в одном случае tag_key такой а в другом другой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:56:05 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
tanglir, подскажите ссылку на тему, ищу щас пока не нахожу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:58:18 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
smalaя прошу решения tanglirБуквально сегодня похожая тема была, почитайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 12:59:06 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
тоесть мне использовать -> having sum(tag in (1,3)) ???? такого плана что то ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:14:05 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
плин...та у тебя ошибка в запросе... тебе сказали, ты ищешь запись в таблице где одно поле равно разным значениям... я читал твой ответ...ты на листике себе нарисуй, какой результат должна выдать база... допустим она както сделала что ты хочешь...в столбике хеша она какое из двух значений должна выдать??? ЗЫ как на рисуешь, и возникнет вопрос что делать - джоин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:22:53 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
(`otvets`.`tag_key`, `otvets`.`val`) IN ( ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська'), ('345805b88b9ca1e189fa11ea817e5666','ФО') ) такое тоже не срабатывает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:26:01 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
я понимаю в чем проблемма, но как мне ее обойти, запрос у меня правильный и не вяжется только в этом моменте я его весь сюда не выкладывал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:27:21 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
smala(`otvets`.`tag_key`, `otvets`.`val`) IN ( ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська'), ('345805b88b9ca1e189fa11ea817e5666','ФО') ) такое тоже не срабатывает это выводит все совпадения где есть или ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська') или ('345805b88b9ca1e189fa11ea817e5666','ФО') а мне надо только то где есть ('543dc43df3cf5aea67cf59650142ae36', 'Полтавська') И ('345805b88b9ca1e189fa11ea817e5666','ФО') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:28:45 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
НАПИШИ каким должен быть ответ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:29:02 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
вот я и похожее нашел http://prntscr.com/558lbb поэтому и спрашиваю не HAVING юзать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:30:49 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, table1 id name 1 'bla bla bla' 2 'bla2 bla2 bla2' table2 id, on_id, tag_key, val 1 1 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська' 2 1 '345805b88b9ca1e189fa11ea817e5666' 'ФО' 3 2 '543dc43df3cf5aea67cf59650142ae36' 'Полтавська' 4 2 '345805b88b9ca1e189fa11ea817e5666' 'ФА' в ответе нужен table1 1 'bla bla bla' ))))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:31:57 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
smala, Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:41:12 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
ну подскажи в какую сторону копать хоть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 13:58:51 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. вот интересует как быть в этом месте (DISTINCT `otvets`.`tag_key`)=2 -> если в одном условии уникальных ключа 2 а в другом один ??????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 16:59:50 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. я уже вот какой пример придумал, вот по сути вот такая мне нада выборка, а не работает из за разных tag_key ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2014, 17:59:58 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
СОВЕТ вкачестве ПыСы перестань пытаться решить задачу галопом. решай почучуть. например, мне надо из таблицы юзеров ! стоп! select * from users; смотрим...вот что имеем вначале - все юзеры. дальше - из таблицы юзеров найти тех, у которых среди домашних животных ! стоп select * from users u left join animals a on (u.id = a.user_id) смотрим - то что надо, связались данные у которых среди домашних животных есть одновременно кот и собака !стоп сначала просто кот select * from users u left join animals a on (u.id = a.user_id) where a.type='cat' Отдельно собака select * from users u left join animals a on (u.id = a.user_id) where a.type='dog' нам надо ито ито, это часть илито или то. берём попроще select * from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' смотрим...ага, юзеры с собакой встречаються ввиде записи вася ....собака гавчик с котом - юля кот мурчик... ис собакой и с котом ввиде толя кот мяукалка... толя собака кусачка... ага, юзеры что нам нужны встречаються дважды... так. а как бы теперь выбрать юзеров которые встречаються дважды... ну пощитать то мы можем - каунт - занчит лепим select u.id,count(*) from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' group by u.id тааак, и теперь оставить тех что дважды select u.id,count(*) from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' group by u.id having count(*) = 2; вроде как вышло... на сразу ясно что хе%%ня вышла. - а что если у человека не кот и собака, а две собаки? тоже ведь дважды встретиться (связь один юзер к многим животным домашним) вот групировка канает, если бы мы имели результат ввиде юля кот вася собака толя собака толя кот тоесть на каждую пару юзер - тип животного была бы одна запись, про сам факт, у юзера А есть хотябы одно живтное типа Б как получить такое select DISTINCT u.id,a.type from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' оооо дальше понятно как. select id,count(*) from ( select DISTINCT u.id as id,a.type as type from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' ) group by id having count(*) =2 ооо. ну блин чтото сложновато. анука гугли - пощитать количество уникальных записей опа. переписываем что нашли гуглом. select u.id, count(distinct a.type) from users u left join animals a on (u.id = a.user_id) where a.type='cat' or a.type='dog' group by u.id having count(distinct a.type) =2 таак. а можно ли его ускорить, а то мы выбираем всё, потом ищем уникальные... чтобы придумать. вообще сразу смущает - а накой мы тащим таблицу юзеров, если используем только айди который есть в таблице животных ввиде внешнего ключа так переписываем select a.user_id,count(distinct a.type) from animals a where a.type = 'dog' or a.type = 'cat' group by a.user_id having count(distinct a.type) = 2 о! но всёрано мудяцки... выборка полная а потом искать уникальные..всмысле мы вибараем и тех что по одному животному имеют(либо кот либо собака) - а накой они нам...вот бы сразу ... опа - идея, а что если джоинить саму к себе таблицу??? selelct * from animals a1 join animals a2 on (a2.user_id = a1.user_id) where a1.type = 'cat' and a2.type = 'dog' ооо чтото ближе. если сделать индексы на поле тип животного, оно по одному индексу найдёт кошатников, по этому же индексу но для "другой" таблицы собачатников, и там и там получит список записей и найдёт те где один и тотже юзер подустал писать... вообщем сделав запрос получим для заядлых животноводов кучу записей - на каждую пару собака -кот если у человека 5 котов и 3 собаки - 3*5 = 15 записей ну и тут приходит на ум отработаный дистинкт. ==== писал наспех, но чтоб показать - не надо пытаться сразу сделать, если не получаеться... иди потихоньку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 00:15:09 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, авторвообщем сделав запрос получим для заядлых животноводов кучу записей - на каждую пару собака -кот если у человека 5 котов и 3 собаки - 3*5 = 15 записей но мне получается надо найти 5 котов 3 собаки из приюта 1, и 4 кота 1 собака из приюта 2)) вот в таком случае я незнаю какой писать дистинкт, пробовал сумму уникальных значенний ключа, никак, а для одного приюта правильно работает)) ну Спасибо оч все расписали, думаю у меня получится собрать то что надо. вот я использовал дистинкт Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. а в конце запроса пишется Код: sql 1. 3 это количество уникальных ключей, если взять только половину запроса Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. тут имеется 2 уникальных ключа 543dc43df3cf5aea67cf59650142ae36 и 345805b88b9ca1e189fa11ea817e5666 если прописать Код: sql 1. то все правильно срабатывает, но при полном запросе когда в одном варианте 2 уникальных значения, в другом 1. какой дистинкт писать непонятно, сумма не помогла. надо походу join ить пытатся таблици, причем получается столько раз сколько мне надо указать разных tag_key ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 10:12:32 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
У МЕНЯ ВЫШЛО УРА!))))) вот такой вот вариант в моем случае подходит Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 13:14:34 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
smala, не вчитывался, но это Код: sql 1. 2. 3. явно аналогично такому: Код: sql 1. 2. 3. 4. 5. 6. 7. Не стоит усложнять условия, если этого можно избежать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 13:22:39 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
да, согласен, но мне так удобней получается, запрос собирается в цикле, динамически, множество условий, все такое, так что пусть уже так будет )) работает и отлично))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 14:52:03 |
|
||
|
Сложный запрос
|
|||
|---|---|---|---|
|
#18+
как видите что это выводится в одном месте цикла))) Код: sql 1. 2. 3. 4. 5. и этот Код: sql 1. в общем потом уже буду оптимизацию проводить)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.11.2014, 14:57:09 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38802017&tid=1833949]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
57ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 396ms |

| 0 / 0 |
