Форум сайта python.su
Здравствуйте.
Начну с небольшого лирического отступления.
У меня есть база данных MyQSL, хранящаяся на обычном хостинге. Выбор использования БД хостинга основывался на возможности удаленного подключения к БД из разных мест. К тому же, хостинг уже имелся до начала разработки проекта.
В базе имеется определенная, интересующая нас, таблица, которая имеет несколько столбцов. Один из столбцов содержит списки элементов, т.е. в ячейке хранятся данные следующего вида:
[123456, 23456789, 3456789, 41234567, 5678909, 64563223, 74456785, 8456788]
i for i in set(mylist) if mylist.count(i) >= 3
Отредактировано artexcite (Июль 7, 2017 23:12:23)
Офлайн
artexciteНепонятно, что нужно выбрать (двусмысленно написано).
Мне необходимо собрать из всех списков, элементы, которые повторяются 3 и более раз в разных списках
Офлайн
> Один из столбцов содержит списки элементов
У тебя не нормализованная схема данных. Тебе нужно твой список хранить в отдельной таблице. Тогда можно будет решить твою задачу с помощью 1 запроса.
Офлайн
py.user.nextОк.
Приведи конкретный пример на как бы выгруженных списках. Представь, что ты уже выгрузил списки, и у тебя получилось три каких-то списка, вот на них и приведи пример, что и по какому принципу из них выбирать.
list_1 = [1,2,3,4,5,8,8] list_2 = [3,4,5,6,7] list_3 = [3,4,5,6,7,8] list_all = list_1 + list_2 + list_3 print(*(i for i in set(list_all) if list_all.count(i) >= 3))
Отредактировано artexcite (Июль 8, 2017 01:00:27)
Офлайн
Rodegast
У тебя не нормализованная схема данных. Тебе нужно твой список хранить в отдельной таблице. Тогда можно будет решить твою задачу с помощью 1 запроса.
SELECT name_colum FROM name_table GROUP BY name_colum HAVING COUNT(name_colum) >= 2
INSERT INTO name_table (name_colum) VALUES ("Значение 1"), ("Значение 2"), ("Значение N")
INSERT INTO name_table (id_list, id_list_item) VALUES ("Значение", "Значение") ON DUPLICATE KEY UPDATE id_list = "Значение"
Отредактировано artexcite (Июль 8, 2017 00:57:58)
Офлайн
artexciteНадо брать каждый список и потом брать каждый элемент списка.
Пост выше подправил.
Приведу простенький пример.
Офлайн
> у меня получится около 200 миллионов строк таблицы
А что ты там хранишь если не секрет?
> 2. Не смог реализовать запрос:
У тебя должна быть вставка нескольких строк.
> P.S. Если честно я не знаю, как будет вести себя таблица БД если в ней будет 200 миллионов строк.
Мускул поведёт себя хреново, лучше используй PostgreSQL. Если в у тебя изначально заложена денормализация, то ИХМО нужно смотреть на NoSQL.
Офлайн
> То есть не надо ничего выгружать, сохранять, соединять, всё делается на лету.
Там 3500 списков, в каждом 100 000 элементов. У тебя памяти на это не хватит.
Офлайн
RodegastТам память вообще не нужна, так как всё на итераторах.
Там 3500 списков, в каждом 100 000 элементов. У тебя памяти на это не хватит.
Офлайн
Rodegastподтверждаю, не хватит
Там 3500 списков, в каждом 100 000 элементов. У тебя памяти на это не хватит.
Офлайн