Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с MySQL запросом пожалуйста

52K
30 октября 2010 года
lexandr
26 / / 16.07.2010
В базе в таблице pages хранятся страницы сайта. Каждая страница находиться в нескольких категориях на сайте, имеет столбец category
записаны они в нем в таком виде

catid,catid,catid,catid,catid,catid
то есть например
1,5,12,10

Как выбрать из таблицы все страницы с категорией только 5 например?
Страницы:
369
24 ноября 2010 года
Kesano
451 / / 09.10.2007
Цитата: SibBear
Подведем итоги:

P.S. зачем мучить LIKE если есть IN () я тоже не понял...



Поясни про in() ... не нашел...

244
24 ноября 2010 года
UAS
2.0K / / 19.07.2006
А что пояснять? Зачем делать ресурсоемкую и глупую операцию LIKE, когда есть оператор IN.
Т.е. строку |12||14||15| разбиваем на табицу (id_parent, number), где number и является числом из мн-ва 12,14,15. Теперь выборка будет с условием WHERE number IN(12,14), а не LIKE.

+ как вы собираетесь удалять элементы строки? Чтоли каждую строку выбирать, искать в ней подстроку, удалять? Ну это изврат гигантский.
369
24 ноября 2010 года
Kesano
451 / / 09.10.2007
УАСЬ, дай конкретный пример с IN
396
24 ноября 2010 года
SibBear
223 / / 27.07.2006
Цитата: Kesano
УАСЬ, дай конкретный пример с IN



 
Код:
SELECT id, name, desctiption FROM my_table WHERE id IN (54, 66, 78, 32 .. и т.д.) ORDER BY id

все просто
63
24 ноября 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: SibBear
Ну а каким еще образом обнавлять таблицу из тысячей записей? тут вариантов то не так много, хоть там и обновляется только 2 колонки, и не чаще, скорее всего, чем раз в месяц, но строк уйма и их надо как то обновлять.


Апдейт все равно идет по каким то ключам, вот сделать соотв. заранее темповую табличку, в ней приготовить данные для апдейта и потом обновить одним запросом из темповой таблички таргет-табличку.

63
24 ноября 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: RussianSpy
Так и обновлять как все обновляют.


Ну что это за ответ, ага? Так и обновлять как все обновляют... Все - это кто?

95 процентов населения, как Кот любит говорить?

396
24 ноября 2010 года
SibBear
223 / / 27.07.2006
А темповая табличка, она же так же в базе формируется? тоесть те же запросы? или не так я понимаю?
63
24 ноября 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: SibBear
А темповая табличка, она же так же в базе формируется? тоесть те же запросы? или не так я понимаю?


У вас есть таблица с данными. В ней 10 000 строк. Вы хотите обновить их все. Вероятно, по какому то бизнес правилу? (типа - для каждой строки которая имеет quantity < 10 поставить статус в FAILED etc) Что это за правила? полная логика обновления. Какая она, эта логика?

369
25 ноября 2010 года
Kesano
451 / / 09.10.2007
Т.е. это для того, чтобы не писать WHERE (id='1' OR id='26' OR id='56') и т.д.?
274
25 ноября 2010 года
Lone Wolf
1.3K / / 26.11.2006
Цитата: Kesano
Т.е. это для того, чтобы не писать WHERE (id='1' OR id='26' OR id='56') и т.д.?



Именно, и если не ошибаюсь для мускуля это абсолютно идентичные записи. т.е. id IN (1,2,3) интерпритируется как (id=1 or id=2 or id=3).
Т.е. сильно IN-ом увлекатся не стоит

369
25 ноября 2010 года
Kesano
451 / / 09.10.2007
Вот еще вопрос:
при JOINе, мускуль создаёт временнут таблицу и записывает туда объединяемые таблицы ПОЛНОСТЬЮ, или только те записи, которые соответствуют условию?

Вопрос к тому, насколько болезненно для мускуля джоинить данные из таблиц с 100к+ записей?
63
25 ноября 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: Lone Wolf
Именно, и если не ошибаюсь для мускуля это абсолютно идентичные записи. т.е. id IN (1,2,3) интерпритируется как (id=1 or id=2 or id=3).
Т.е. сильно IN-ом увлекатся не стоит


Почему это не стоит? Или он в мускуле реализован криво?

Например, в некоторых других СУБД - обычная нормальная практика писать
where sys_id in (select id from table_name where...) etc. с подзапросами. Которые могут возвращать много уникальных значений. Такии вещи, как разворачивание подзапросов и трансформации IN во что-то оптимизатор в СУБД должен делать.

63
25 ноября 2010 года
Zorkus
2.6K / / 04.11.2006
Цитата: Kesano
Вот еще вопрос:
при JOINе, мускуль создаёт временнут таблицу и записывает туда объединяемые таблицы ПОЛНОСТЬЮ, или только те записи, которые соответствуют условию?


Я не знаю сходу, но вероятно можно быстро нагуглить. Вам для саморазвития или для работы приложения это важно? Я бы скорее мерил какие то конкретные вещи типа времени выполнения запроса / план его / потребление памяти.

Цитата: Kesano

Вопрос к тому, насколько болезненно для мускуля джоинить данные из таблиц с 100к+ записей?


Зависит от того, какой логический джойн нужен (inner, left, rigth..) и какой алгоритм объединения используется (hash join, nexted loops, sorted merge), по каким полям, сколько их, какие используются предикаты (только == и != или еще <, >, LIKE, IN), разумеется - какие индексы на таблицах, есть ли на таблицах партишенинг (если есть - совпадает ли он на таблицах, достигается ли Partition Pruning и прочее).

Если вообще, джойн таблиц по 100к записей - при правильном использовании индексов, отсекающих предикатах и грамотной структуре базы вообще ноль даже на слабом железе (Вот таблицу в которой скажем, 5-10 миллиардов записей - надо джойнить крайне внимательно). Но если у вас таких запросов идет по 10k в секунду - тогда я не знаю :)

Короче, запросы план запросов и таблиц в студию.

15
27 ноября 2010 года
shaelf
2.7K / / 04.05.2005
Я немного после корпоратива, может и не в тему, но всё же)) Для мускула (да и не только для него) не важно где стоит значение, а нгде ключ. Т.е.
WHERE id = 5 идентично WHERE 5 = id. Из этого следует, что не нужно писать WHERE (id = 5 OR otherId = 5), достаточно 5 = (id OR otherId);

Сорь за флуд )
52K
05 декабря 2010 года
lexandr
26 / / 16.07.2010
Спустя 50 дней я все таки решил эту проблему:)
 
Код:
Where ctaegory regexp '[[:<:]](все другие категории)[[:>:]]

таким способом.
244
05 декабря 2010 года
UAS
2.0K / / 19.07.2006
Хуже LIKE могли быть только регулярные выражения
52K
05 декабря 2010 года
lexandr
26 / / 16.07.2010
Ну а как тогда организовывать базу чтобы была возможность динамического добавления категорий в данном примере?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог