@mysql_ru

Страница 83 из 142
Pasha
12.10.2017
09:35:57
Добрый день, никто не сталкивался вот с таким

SELECT * FROM someTable st0 WHERE st0.field IN (subQuery1) AND st0.field IN (subQuery2)

возвращает пустоту хотя subQuery1 и subQuery2 возвращают одни и теж значения

Ринат
12.10.2017
09:41:16
эм

Google
Ринат
12.10.2017
09:41:38
а зачем два раза по одному и тому же полю?

SELECT * FROM someTable st0 WHERE st0.field IN (subQuery1) так работает?

Pasha
12.10.2017
09:42:33
из-за того что запрос динамически строится кодом

да так работает

Yaroslav
12.10.2017
09:42:57
возвращает пустоту хотя subQuery1 и subQuery2 возвращают одни и теж значения
у тебя одно поле должно быть в двух множествах

оно есть и в1 результате и во втором?

Pasha
12.10.2017
09:44:10
да есть

правда разные alias`ы у одной и той же таблицы

в subQuery1 это SELECT b1.id FROM books b1... а во втором это SELECT b2.id FROM books b2..

Yaroslav
12.10.2017
09:49:08
сделай where к каждому подзапросу, оба возвращают результат?

SELECT * FROM someTable st0 WHERE st0.field IN (subQuery1) и SELECT * FROM someTable st0 WHERE st0.field IN (subQuery2)

можно еще так SELECT * FROM someTable st0 WHERE st0.field IN (subQuery1 UNION subQuery2)

поля правильные проверяешь и выводишь?

Google
Pasha
12.10.2017
09:55:34
да оба возвращают одно и тоже

Yaroslav
12.10.2017
09:56:15
Pasha
12.10.2017
09:59:25
да срабатывает

Yaroslav
12.10.2017
10:01:00
значит в каком-то из запросов нет такого результата

должно выводить если оба подзапроса имеют такое поле.

Nikolay
12.10.2017
17:43:56
Ребята, всю голову сломал уже, не могу сообразить каким образом можно решить проблему. Есть таблица CREATE TABLE user_favorite ( user_id INT(10) NOT NULL, post_id INT(10) NOT NULL ); Нужно вывести пользователей у которых максимально количество общих постов Уже всяко разно пробовал и группировку и вложенные селекты. Не могу сообразить как

Yaroslav
12.10.2017
17:44:45
что значит, максимальное количество общих постов?

если у вас связь много ко многому, то лучше добавить таблицу промежуточную

Nikolay
12.10.2017
18:02:54
это и есть промежуточная таблица

Nikolay
12.10.2017
18:17:14
ну например, есть три пользователя A, B и C. Пользователи A и B добавили в избранное посты 123, 124, 125, так же, пользователь B добавил посты 160, 170 так вот, мне нужно получить эти общие id постов, которые в примере 123, 124, 125 и их авторов A и B

lost
12.10.2017
18:18:53
Изи

Nikolay
12.10.2017
18:19:06
одним запросом?

lost
12.10.2017
18:19:15
Вообще легко

Nikolay
12.10.2017
18:19:20
Как?

lost
12.10.2017
18:20:29
Сначала group_concat постов с группировкой по юзерам

Nikolay
12.10.2017
18:20:30
давай я тебе даже sqlfiddle сделаю

а потом?

вот я с ним возился, никак не дошло куда дальше сконкатенированные id девать

lost
12.10.2017
18:21:04
Потом оборачиваешь это в подзапрос и группируешь юзеров по набору постов

Google
lost
12.10.2017
18:21:20
Правда вариант такое себе

Yaroslav
12.10.2017
18:21:22
Пересечение через select можно

lost
12.10.2017
18:22:14
Потом оборачиваешь это в подзапрос и группируешь юзеров по набору постов
А чтобы работало наверняка внутри group_concat делаешь сортировку по айдишникам постов

Чтобы наборы айдишников были отсортированы и потом совпали все

Nikolay
12.10.2017
18:23:06
http://sqlfiddle.com/#!9/3f35c5/2/0

вот

lost
12.10.2017
18:25:31
Минут через 15 налячкаю

Если сам не разберешься

Nikolay
12.10.2017
18:26:47
постараюсь

ну короче это максимум что я смог ) http://sqlfiddle.com/#!9/3f35c5/9/0

lost
12.10.2017
18:55:03
http://sqlfiddle.com/#!9/3f35c5/12/0

только датасет который ты подобрал под этот запрос не очнь подходит

http://sqlfiddle.com/#!9/05f68e/1/0

Yaroslav
12.10.2017
19:05:35
http://sqlfiddle.com/#!9/05f68e/1/0
подскажи пожалуйста, а зачем ты добавил CRC32(a.dataset),?

lost
12.10.2017
19:06:34
группировка по строкам это плохая затея, писал об этом выше на выборке в 10 строк можно и по варчарам группировать, а когда у тебя этих постов будет пару сотен тысяч... в общем грустно это будет а так небольшой выйгрыш по скорости

Yaroslav
12.10.2017
19:07:49
понял

спасибо за обьяснение

lost
12.10.2017
19:13:56
единственное что нужно знать, что crc32 может давать коллизии в теории

как и хэшики от md5

Google
Alexander
12.10.2017
20:46:14
садись, два

lost
12.10.2017
20:48:56
Alexander
12.10.2017
20:58:17
оно на практике (коллизии) очень быстро и просто

для crc32

lost
12.10.2017
21:00:16
любители прикапываться к словам подоспели

если подгонять через какие-то алгоритмы, то может и быстро и просто, а речь шла о совпадении в запросе

Alexander
12.10.2017
21:08:13
для crc32 коллизии считались ещё во времена фидо

rocknrolla
15.10.2017
09:12:47
Народ ,подскажите, как будет выглядеть запрос , нужно скопировать из одной строки title , text ,where id=3 и вставить в другие строки где id =44,57,33,29

lost
15.10.2017
09:18:56
update foo f join (select title, text from foo2 where id = 3) as ff on true set f.title = ff.title, f.text = ff.text where id IN (44,57,23,29)

rocknrolla
15.10.2017
09:47:44
спасибо!!!

большое

Илья
16.10.2017
07:43:50
Всем привет! Подскажите, как можно упростить вот такой запрос? SELECT * FROM table WHERE concat_ws('', name, middleName, surName) LIKE '%cagejohn%' UNION SELECT * FROM table WHERE concat_ws('', surName, middleName, name) LIKE '%cagejohn%' UNION SELECT * FROM table WHERE concat_ws('', middleName, name, surName) LIKE '%cagejohn%' UNION SELECT * FROM table WHERE concat_ws('', surName, name, middleName) LIKE '%cagejohn%' UNION SELECT * FROM table WHERE concat_ws('', name, surName, middleName) LIKE '%cagejohn%' UNION SELECT * FROM table WHERE concat_ws('', middleName, surName, name) LIKE '%cagejohn%'

Yaroslav
16.10.2017
07:45:27
через оператор in

Илья
16.10.2017
07:45:30
суть в том, что я ввожу часть начало ФИО в любом порядке и должен получить результат поиска. John S Cage или S Cage John запросы должны вернуть одни и те же результаты

Yaroslav
16.10.2017
07:45:48
либо черезе like

Илья
16.10.2017
07:46:14
либо черезе like
так у меня сейчас через like

Yaroslav
16.10.2017
07:54:55
сделать в одном where

и лучше в бд хранить эти штуки по отдельности

а выводить конктинированные

Google
Yaroslav
16.10.2017
07:55:47
проще работать будет

Илья
16.10.2017
07:57:28
SELECT * FROM gjjbook_db.accounts WHERE concat_ws('', name, middleName, surName) LIKE '%cagejohn%' OR concat_ws('', surName, middleName, name) LIKE '%cagejohn%' OR concat_ws('', name, surName, middleName) LIKE '%cagejohn%' OR concat_ws('', middleName, surName, name) LIKE '%cagejohn%' OR concat_ws('', middleName, name, surName) LIKE '%cagejohn%' OR concat_ws('', surName, name, middleName) LIKE '%cagejohn%';

Yaroslav
16.10.2017
08:03:20
можно подзапросами

сначала ищешь surName

потом name, потом middleName

либо через join

тебе ж главное, чтоб была вся инфа, а последовательность роли не играет

Илья
16.10.2017
08:05:36

Страница 83 из 142