Forum Webscript.Ru

Общие => Базы данных => Тема начата: Forza от 08 Июня 2004, 01:10:55

Название: MySQL: не поддающийся мне SELECT :)
Отправлено: 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.
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Макс от 08 Июня 2004, 01:39:28
нельзя
(не считая варианта с ХП в mysql5)
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: fidget от 08 Июня 2004, 17:16:58
см.  функция GROUP_CONCAT()

правда она только с версии 4.1.
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Forza от 08 Июня 2004, 18:16:24
fidget, а у меня версия только 4.0.12. Блин!

На http://dev.mysql.com/downloads/ предлагают скачать 4.1.2-alpha, 5.0.0a-alpha. Что из этого лучше? А то слово alpha меня смущает.

Макс, а что такое ХП в mysql5? ;)
Если это поможет, то не проблема установить и скачать 5ый mysql. Или его не стоит скачивать, пока он -alpha?
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: fidget от 08 Июня 2004, 18:26:54
> Что из этого лучше? А то слово alpha меня смущает.

альфа она всегда альфа. Но ветка 4.1  будет развиваться быстрее, чем 5.0.

> ХП в mysql5?

хранимые процедуры.
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Лосик от 14 Июня 2004, 21:58:52
А переход к более традиционной структуре (таблица "Люди", таблица "Мылы", таблица "Телефоны" связанные по Люди.ID) не?..
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Forza от 15 Июня 2004, 11:58:02
Не. :)
Я же писал, что люди приведены в качестве простого примера.

На самом деле, по ходу эксплуатации базы могут появляться любые другие дополнительные параметры для других объектов, и было решено, что не очень хорошо под каждый новый доп. параметр создавать таблицу, переписывать скрипт и т.д.
А так всё красиво и универсально.

На самом деле, я уже с этим разобрался. Было решено не выпендриваться и выводить дополнительные данные только после клика на конкретного человека, а в общей таблице их не указывать.
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Rel от 16 Июня 2004, 18:01:55
как вы лодку назовете - так она и поплывет

так и с твоей бд, Forza
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: Forza от 16 Июня 2004, 19:01:12
Откуда ты знаешь, как я её назвал? ;)
Название: MySQL: не поддающийся мне SELECT :)
Отправлено: CLiI{er от 23 Июня 2004, 14:07:15
Точно в указанной форме вывести нельзя, но это не является проблемой.
Нужно немного доработать вывод на страницу.
Сначала построить массив по person_id, затем выводить содержимое массива, а не данных из mysql_result.
Например:
$array[$rows[\'person_id\']][] = $rows;