powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объект с переменным числом хар-к
4 сообщений из 4, страница 1 из 1
Объект с переменным числом хар-к
    #39044536
МАН69К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть объект у которого может быть либо одна, либо две характеристики из конечного набора характеристик.
Соотвественно два таблицы. Таблица характеристик с полями "Ид. характеристики" и "Имя характеристики" и таблица объектов - "Ид. объекта", "Имя объекта", "Ид. характеристики_1", "Ид. характеристики_2". Четвёртое поле в таблице объектов ("Ид. характеристики_2") может быть null.
Допустим в таблице объектов есть строка с такими значениями:
"Ид. объекта", "Имя объекта", "Ид. характеристики_1", "Ид. характеристики_2"
...
7 Арбуз 3 15
...

А в таблице характеристик две такие записи:
"Ид. характеристики" и "Имя характеристики"
...
3 Большой
...
15 Сладкий
...

Каким запросом можно получить значение вида:
7 Арбуз Большой Сладкий
Т. е. что бы связать числовые идентификаторы из одной таблицы с соответствующим им строковым значениям из другой таблицы?
Я читал примеры работы с JOIN, но из-за того что в поле "Ид. характеристики_2" может быть null, моя попытка составить запрос привела к тому, что я получал не одну строку, а столько, сколько было в таблице характеристик, при этом в каждой из строк в столбце "Ид. характеристики_2" было новое значение характеристики.

Или может это лучше в PHP сделать? Т. е. первым запросом получить идентификаторы характеристик, а потом послать второй запрос и посмотреть какие словесные названия соответствуют этим идентификаторам?
Или вставить в таблицу характеристик строку, где поле "Имя характеристики" будет принимать значение null, а а в тех строках таблицы объектов, где нет второй характеристики - вместо null указывать идентификатор этой строки из таблицы характеристик?
...
Рейтинг: 0 / 0
Объект с переменным числом хар-к
    #39044562
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
создайте функцию GETPARAM(Ид.Объекта, НаименПараметра)

Код: sql
1.
SELECT id, GetParam(id, "param1"), GetParam(id, "param2") from TableParam


подходит для любого количества параметров

если уж точно конкретное количество параметров, то

Код: sql
1.
2.
3.
4.
5.
6.
SELECT t.id, t.NameObj, p1.ParamValue, p2.ParamValue /* по количеству параметров */
FROM TabObject AS t 
LEFT JOIN TabParam AS p1 ON t.id=p1.IdObj and p1.NameParam="param1"
LEFT JOIN TabParam AS p2 ON t.id=p2.IdObj and p2.NameParam="param2"
LEFT JOIN TabParam AS p3 ON t.id=p3.IdObj and p3.NameParam="param3"
/* по количеству параметров */


для визуального отображения всех имеющихся параметров у объекта достаточно
Код: sql
1.
2.
3.
4.
SELECT t.id, t.NameObj, GROUP_CONCAT(p.ParamValue,)
FROM TabObject AS t 
JOIN TabParam AS p ON t.id=p.IdObj
GROUP BY t.id
...
Рейтинг: 0 / 0
Объект с переменным числом хар-к
    #39044566
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уууух, у вас структура не такая, тогда

Код: sql
1.
2.
3.
4.
5.
6.
SELECT t.id, t.NameObj, p1.ParamValue, p2.ParamValue /* по количеству параметров */
FROM TabObject AS t 
JOIN TabParam AS p1 ON t.IdParam1= p1.Id
JOIN TabParam AS p2 ON t.IdParam2= p2.Id
JOIN TabParam AS p3 ON t.IdParam3= p3.Id
/* по количеству параметров */
...
Рейтинг: 0 / 0
Объект с переменным числом хар-к
    #39045544
МАН69К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ооо, здорово, спасибо, Alex_Ustinov !
То что нужно, получил что хотел.
А я, увидев в доке пример
Код: sql
1.
2.
SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
                 ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)


не в ту степь ушёл...
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объект с переменным числом хар-к
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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