@CSharpChatЭта группа больше не существует

Страница 499 из 1888
Владимир
07.03.2017
21:48:59
На первый взгляд выглядит как простой join с подзапросом с условиями на равенство или неравенство
Ну, я не знаю, как это написать, как простой джоин. Меня особенно смущают эксклуды. Можно даже забыть пока про таблицу файлов. Нужно просто из одной таблицы BindedTags выбрать по заданным условиям. Может можно сгруппировать по TargetId и как-то условиями группы отсеять.

Владимир
07.03.2017
22:11:07
Тебе надо сначала выбрать все теги с заданными ид и каждому проверить, совпадает ли значение, а потом фильтровать файлы полученным списком?
Ну это очень грубо, но да. Значения привязывыются не к тегу, а к связи тега с файлом. BindedTags таблица связей как раз. Так что эта проверка и есть фильтрация.

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
SELECT * FROM Tags t JOIN TaggedFiles tf ON tf.TagId = t.Id JOIN Files f ON f.Id = tf.FileId WHERE t.TagText = 'xxx'
Это конечно классно, но у меня структура немного сложнее -_-

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
отсюда

Я несколько накидан в данный момент, но первым делом можно начать в лоб с такого: 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 (...) Но видимо надо вместо джоина с таблицей тегов сделать подзапрос, в котором выбирать теги по имени и значению
Теги вообще можно не джоинить, вся инфа есть в биндедтегс. Эксклуд это внешний параметр, он приходит вместе с тегами, по которым надо выбрать, а не хранится в базе. Чую, нужно пример замутить, или я сложно объясняю, или никто не понимает.

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 Один возвращенный файл.

а где Include?
По умолчанию инклуд. Exclude=f, это инклуд.

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

Владимир
07.03.2017
22:39:15
а много данных на входе?
Можно ограничить 50 тегами.

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
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
Это просто выбор файлов по айди с тегами. А где эксклуды? А где проверка значений?

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
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
не переживай, лучше не трогать и пятиметровой палкой
Я пересел с mssql на оракл, а потом на MySQL. И оракл далеко не самый худший в этой цепочке.

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

Владимир
07.03.2017
23:20:50
https://gist.github.com/stdray/766441295cec0b7ed7bd5904abba04c8
ты починил только со значениями эксклудов, а что на счет таки их работы?

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}))

ты просто не будешь джойнить такие теги с файлами

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
Хпасом выдирать из сайта? Или есть более человеческий способ?
ну если тебе надо веб-странички распарсить, то вариантов мало 1. если знаешь хpath - то хтмагилитипак 2. если знаешь css/jquery selectors - csquery 3. если ищешь не подохшую либу - anglesharp

про скорость и многопоточность наверное нет смысла рассуждать на 999 страницах

Страница 499 из 1888

Эта группа больше не существует Эта группа больше не существует