
Владимир
07.03.2017
21:48:59

Axm
07.03.2017
22:04:38

Владимир
07.03.2017
22:11:07

Sergey
07.03.2017
22:20:27
У если у тебя многие-ко-многим тогда вот так небось

Google

Sergey
07.03.2017
22:20:29
SELECT
*
FROM Tags t
JOIN TaggedFiles tf ON tf.TagId = t.Id
JOIN Files f ON f.Id = tf.FileId
WHERE t.TagText = 'xxx'

Владимир
07.03.2017
22:21:58

Axm
07.03.2017
22:22:09
Я несколько накидан в данный момент, но первым делом можно начать в лоб с такого:
Select * from files f join bindedtags bt on f.id = bt.targetid join tags t on bt.tagid = t.id where t.exclude != 1 and t.id in (...)
Но видимо надо вместо джоина с таблицей тегов сделать подзапрос, в котором выбирать теги по имени и значению

Sergey
07.03.2017
22:23:34

Arseniy
07.03.2017
22:24:01

Владимир
07.03.2017
22:24:09
отсюда


Axm
07.03.2017
22:27:38
Конечно не понимаем, это не так просто без контекста, сразу въехать в задачу

Владимир
07.03.2017
22:34:30

Google

Arseniy
07.03.2017
22:36:09
а где Include?

Sergey
07.03.2017
22:38:00
создал тип, создал сторедпроку, отфильтровал нужные айди, пульнул на сервер

Владимир
07.03.2017
22:38:04
Ожидаемый ответ:
Мы не возвращаем первый файл, потому что у него нет тега 1 со значением some_value1
Мы не возвращает второй файл, по той же причине
Мы возвращает третий файл, потому что у него есть тег 1 со значением some_value1, есть просто второй тег, и нет тега 3 со значением some_value3
мы не возвращаем четвертый файл, потому что у него нет тега 1 со значением some_value1
Ну и пятый, если представить, что у тега1 значение все же some_value1, то мы его не вернем, потому что у него есть тег 3 со значением some_value3
Один возвращенный файл.

Arseniy
07.03.2017
22:38:51
а много данных на входе?

Владимир
07.03.2017
22:39:15

Sergey
07.03.2017
22:42:54
CREATE TYPE TagIds
AS TABLE
(
Id int
);
GO
CREATE PROCEDURE SelectFiles
@dt AS TagIds READONLY
AS
BEGIN
SELECT
*
FROM @dt t
JOIN TaggedFiles tf ON tf.TagId = t.Id
JOIN Files f ON f.Id = tf.FileId
END
а в проге:
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
//забиваешь в дататейбл нужные Ид и шлешь в сторедпроку

Владимир
07.03.2017
22:46:40

Sergey
07.03.2017
22:46:47
типа эксклюдишь в шарпе
создаешь список для выборки и фигачишь его в сторедпроку
и проверка значений там же

Dimanius851
07.03.2017
22:47:26
а абстрактный класс методом расширения расширить нельзя?

Владимир
07.03.2017
22:52:14
типа эксклюдишь в шарпе
Ничего не понял, если честно, что вернет эта процедура. Все связи переданных тегов с файлами?
Там, например, есть теги которые есть у всех файлов и отличаются только значениями. Он будет грузить всю таблицу файлов, чтобы откинуть потом 99%?
Это точно будет быстрее текущего кривоватого, но работающего метода?
В таблице BindedTags 2 миллиона записей и будет расти.

Arseniy
07.03.2017
23:00:43
@e1ee7 я правильно понял http://pastebin.com/dWbKTRZ9 ?
я только не знаю, сумеет энтити телепортировать туплы. то что массивы зачений на контейнс должен выполнить на сервере - 100%, а вот с туплами я хз

Владимир
07.03.2017
23:04:00

Sergey
07.03.2017
23:04:36

Axm
07.03.2017
23:06:11

Google

Arseniy
07.03.2017
23:07:11
ну так я просто написал на динку, что бы делал в хранимке
у меня оракл у меня всё в хранимках. я бы примерно такое в них бы шпарил

Sergey
07.03.2017
23:08:33
я оракл вообще ни разу не трогал, лол :)
так уж получилось

Arseniy
07.03.2017
23:08:58
не переживай, лучше не трогать и пятиметровой палкой

Sergey
07.03.2017
23:09:40
да вот читаю всякое разное, и не только не переживаю, но еще и радуюсь

Владимир
07.03.2017
23:09:53
@e1ee7 я правильно понял http://pastebin.com/dWbKTRZ9 ?
Ну эксклуд тегс тоже с валуеми могут быть.
Но основная проблема, если я правильно понял, в том, что эксклуд тут не работает.
Если у тебя есть у какого-то файла строчка, которая включает тег эксклуда, то этого файла в результатах быть не должно. У тебя же будет, если у этого файла есть еще какой-нибудь тег, который в filters в инклудах.

Arseniy
07.03.2017
23:10:28
понял

Axm
07.03.2017
23:10:49

Arseniy
07.03.2017
23:13:11
со значениями эксклуда надо просто продублировать логику инклудов
https://gist.github.com/stdray/766441295cec0b7ed7bd5904abba04c8

Arseniy
07.03.2017
23:17:54
дописал и починил. вообще копипасту надо убирать, но в стандартном линке нету partition или подобного

Владимир
07.03.2017
23:20:50

Arseniy
07.03.2017
23:21:12
у тебя файл связан с кучей тегов, так?

Владимир
07.03.2017
23:22:47
Если есть хотя бы один тег в списке эксклудов, то файл этот возвращать не нужно.

Admin
ERROR: S client not available

Arseniy
07.03.2017
23:23:09
у тебя есть 2 коллекции - идентификаторы исключаемых тегов, плюс идентетификаторы со значениями

Google

Arseniy
07.03.2017
23:25:29
и как у тебя такой тег попадёт в список?
!(excludeTagIds.Contains(t.TagId) || excludeTagValues.Contains(new { t.TagId, t.Value }))
&& (includeTagIds.Contains(t.TagId) || includedTagValues.Contains(new { t.TagId, t.Value}))
ты просто не будешь джойнить такие теги с файлами

Владимир
07.03.2017
23:27:18

Arseniy
07.03.2017
23:35:52
понял
https://gist.github.com/stdray/766441295cec0b7ed7bd5904abba04c8
вот так тогда, через 2 подзапроса
тут можна разными способами написать. просто я плохо представляю возможности ентити, тк когда им пользовался, дважды с него мигрировал. плюс не знаю размеров твоих коллекций, с какой стороны заходить

Владимир
07.03.2017
23:42:52
https://gist.github.com/stdray/766441295cec0b7ed7bd5904abba04c8
Ну да, теперь вроде ок, но как он сконвертится в sql интересно.
сейчас попробую натянуть на свой код.
Размеры, коллекция тегов под 2 миллиона. Ну предположим, в 3 раза больше это максимум.
Коллекция файлов - 60к, ну так же, раза в 3 больше это максимум.

Arseniy
07.03.2017
23:44:07
а ты не знаешь часом
стандартные провайдеры линкупада не через ентити робят?
может ничо натягивать и не надо, а просто погонять проще?
как минимум можно подключить
для того, чтобы погонять скрипт и посмотреть запрос - самое оно

Gid
07.03.2017
23:45:59
Господа
Чем можно СКРАППИТЬ БЫСТРО БЫСТРО

Arseniy
07.03.2017
23:46:29
я не знаю такого слова)

Gid
07.03.2017
23:47:16
У меня есть 999 страниц, на них инфа которую нужно запихнуть в бд. Там типа сумма денежек, время и другие поля.
Хпасом выдирать из сайта? Или есть более человеческий способ?

Google

Владимир
07.03.2017
23:47:53
а, ну да, там хпас

Arseniy
07.03.2017
23:49:36
про скорость и многопоточность наверное нет смысла рассуждать на 999 страницах

Gid
07.03.2017
23:51:03
Эта группа больше не существует