Forum Webscript.Ru
Общие => Базы данных => Тема начата: Forza от 08 Июня 2004, 01:10:55
-
Допустим, есть таблица «Люди» в самом примитивном виде:
+-----------+-------------+
| person_id | person_name |
+-----------+-------------+
| 1 | John Smith |
| ..... | ..... |
Также есть некая таблица «Дополнительные данные», имеющая следующий вид:
+-----------+-----------+------------+
| person_id | data_type | data |
+-----------+-----------+------------+
| 1 | e-mail | ab@сd.ru |
| 1 | e-mail | [email]ef@gh.ru[/email] |
| 1 | phone | 12-34 |
| 1 | phone | 23-24 |
| 1 | phone | 14-41 |
| ..... | ..... | ..... |
То есть в данную таблицу заносятся различные дополнительные параметры о людях, которые у них могут не быть, а могут и быть, при этом в неопределённом количестве. В принципе, это можно записать в одном поле в таблице «Люди» через запятую, но начальник хочет, чтобы под каждый экземпляр параметра было отдельное поле (на самом деле, есть и другие более сложные параметры для более сложных объектов – «Люди» приведены только в качестве примера).
Итак вопрос (спасибо всем, кто до него дочитал): можно ли одним select-ом получить что-нибудь типа
+-------------+--------------------+---------------------+
| person_name | e-mail | phone |
+-------------+--------------------+---------------------+
| John Smith | [email]ab@cd.ru[/email], [email]ef@gh.ru[/email] | 12-34, 23-24, 14-41 |
или хотя бы:
+-------------+----------------------------+----------------------------+
| person_name | ?????? | ????? |
+-------------+----------------------------+----------------------------+
| John Smith | e-mail: [email]ab@cd.ru[/email], [email]ef@gh.ru[/email] | phone: 12-34, 23-24, 14-41 |
Я пока не представляю, как вписать в одну строку данные одной записи из таблицы X и нескольких записей таблицы Y.
-
нельзя
(не считая варианта с ХП в mysql5)
-
см. функция GROUP_CONCAT()
правда она только с версии 4.1.
-
fidget, а у меня версия только 4.0.12. Блин!
На http://dev.mysql.com/downloads/ предлагают скачать 4.1.2-alpha, 5.0.0a-alpha. Что из этого лучше? А то слово alpha меня смущает.
Макс, а что такое ХП в mysql5? ;)
Если это поможет, то не проблема установить и скачать 5ый mysql. Или его не стоит скачивать, пока он -alpha?
-
> Что из этого лучше? А то слово alpha меня смущает.
альфа она всегда альфа. Но ветка 4.1 будет развиваться быстрее, чем 5.0.
> ХП в mysql5?
хранимые процедуры.
-
А переход к более традиционной структуре (таблица "Люди", таблица "Мылы", таблица "Телефоны" связанные по Люди.ID) не?..
-
Не. :)
Я же писал, что люди приведены в качестве простого примера.
На самом деле, по ходу эксплуатации базы могут появляться любые другие дополнительные параметры для других объектов, и было решено, что не очень хорошо под каждый новый доп. параметр создавать таблицу, переписывать скрипт и т.д.
А так всё красиво и универсально.
На самом деле, я уже с этим разобрался. Было решено не выпендриваться и выводить дополнительные данные только после клика на конкретного человека, а в общей таблице их не указывать.
-
как вы лодку назовете - так она и поплывет
так и с твоей бд, Forza
-
Откуда ты знаешь, как я её назвал? ;)
-
Точно в указанной форме вывести нельзя, но это не является проблемой.
Нужно немного доработать вывод на страницу.
Сначала построить массив по person_id, затем выводить содержимое массива, а не данных из mysql_result.
Например:
$array[$rows[\'person_id\']][] = $rows;