powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простая таблица, невозможный запрос
14 сообщений из 14, страница 1 из 1
Простая таблица, невозможный запрос
    #39761882
Жека блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток, столкнулся с интересной задачей, которую до сих пор не удалось решить

Существует таблица:

Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `table` (
  `model_id` int(10) UNSIGNED NOT NULL,
  `c1` int(10) UNSIGNED NOT NULL,
  `c2` int(10) UNSIGNED NOT NULL,
  ...
  `cN` int(10) UNSIGNED NOT NULL,
)



Количество параметров cN - варьируется

Необходимо извлечь те model_id, если при группировке их c[1..N] имеют значение m (например=12)

Текущий запрос выглядит так:


Код: sql
1.
2.
3.
4.
5.
            SELECT
                 `model_id`
            FROM `table`
            GROUP BY `model_id`
            HAVING BIT_OR(`c1`=12)AND BIT_OR(`c2`=12)AND ...AND BIT_OR(`cN`=12);



Данный запрос отрабатывает правильно, в случае, когда только один `c` в строке совпадает с заданным числом, так как задача в том, чтобы извлечь модель, обладающую всем набором необходимых характеристик, т.е:

ситуация:

Код: sql
1.
2.
3.
4.
m c1 c2 c3
1  0  1  1
1  1  0  0
1  1  0  0



является невалидной, так как каждая строка должна отвечать только за один параметр, если первая строка отвечает за второй, а вторая за третий, то третья строка должна содержать третий параметр, вот валидные ситуации:


Код: sql
1.
2.
3.
4.
m c1 c2 c3
1  0  1  1
1  1  0  0
1  0  0  1



или


Код: sql
1.
2.
3.
4.
m c1 c2 c3
1  0  1  1
1  0  1  0
1  1  0  0



или


Код: sql
1.
2.
3.
4.
m c1 c2 c3
1  1  0  0
1  0  1  0
1  0  0  1



Если не вполне понятно объяснил, спрашивайте, задача очень важная, надеюсь на вашу помошь
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761890
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жека блин,

1) Что хранится в полях c1,c2, ... ? Всегда ли это числа 0 или 1 (а тогда зачем целых 4 байта на это?), или может быть что-то другое?
2) Что такое "параметр"? Такое ощущение, что в разных местах вашего поста это слово имеет разный смысл.
3) Почему первый пример является невалидным, а второй валидным? И там, и там в каждой записи есть хотя бы одна единица и в каждом поле есть хотя бы одна единица.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761894
Жека блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

1) В полях c1,c2, ... хранится число большее нуля, не равное 1. В данном случае cN=12 ? 1: 0
2) Параметр это строка чекающая один из cN
3) Первый пример является невалидным, а второй валидным, потому что в первом первая строка чекает второй и третий параметр, и нет одельной строки для любого из них, а в других примерах для каждого параметра есть отдельная строка

Спасибо за внимание к задаче
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761911
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жека блинВ полях c1,c2, ... хранится число большее нуля, не равное 1Ну то есть больше 1 ?

Жека блинВ данном случае cN=12 ? 1: 0Что это за запись?
Если это тернарный оператор из C-подобных языков, то все равно непонято. В результате он дает 1, но в cN не может быть 1 по вашим же словам.

Жека блинчекающая?

Жека блинв других примерах для каждого параметра есть отдельная строкаво втором нет строки для c2, а в третьем нет строки для c3.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761912
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос вполне возможен. И даже не сильно сложен. Но для 12 параметров он скорее всего уложит сервер.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761914
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЗапрос вполне возможен.Завидую такому хрустальному шару
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761918
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft , да задача уже полностью понятна. Ему просто нужна матрица, имеющая хотя бы одну ненулевую диагональ.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761920
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЕму просто нужна матрица, имеющая хотя бы одну ненулевую диагональ.А если она не квадратная?
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761981
Жека блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

да, это я тернарным оператором обозначил, проверку на то, что поле равно или не равно искомому числу, для простоты можно обозначить 1 или 0, в зависимости от совпадения.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39761983
Жека блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

можете пожалуйста озвучить возможную версию запроса
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39762060
Жека блин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina miksoft , да задача уже полностью понятна. Ему просто нужна матрица, имеющая хотя бы одну ненулевую диагональ.

скорее не "ненулевую", а "единичную", причем матрица может быть не квадратной, то-есть строк может быть больше чем столбцов, если строк меньше то уже неподходящий случай. Только вот не факт что нужные единицы выстроятся именно в диагональ, а например не так:

Код: sql
1.
2.
3.
4.
5.
0 1 0 0 0
0 0 0 1 0
1 0 0 0 0
0 0 0 0 1
0 0 1 0 0 



так как данный случай тоже валидный, порядок cN не влияет
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39762169
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жека блинТолько вот не факт что нужные единицы выстроятся именно в диагональ, а например не так:Это всего лишь вопрос сортировки записей.
Отсортируйте сразу по всем этим полям в обратном порядке.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39762209
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос "влоб".
Код: sql
1.
2.
3.
4.
SELECT *
FROM table t1, table t2, ... table tN
WHERE t1.c1 != 0 AND t2.c2 != 0 AND ... AND tN.cN != 0
  AND t2.id NOT IN (t1.id) AND t3.id NOT IN (t1.id, t2.id) AND ... AND tN.id NOT IN (t1.id, t2.id, ... , t{N-1}.id)


Для случая, когда записей больше, чем полей - достаточно получить записей столько, сколько полей, и добавить недостающее количество любых записей.
...
Рейтинг: 0 / 0
Простая таблица, невозможный запрос
    #39762317
paver
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaЗапрос "влоб"
Моск сломал ) Но допер таки. Круто.
Надо еще USING (model_id), ну и айдишник где-то раздобыть.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Простая таблица, невозможный запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]