Автор Тема: MySQL: не поддающийся мне SELECT :)  (Прочитано 4881 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
MySQL: не поддающийся мне SELECT :)
« : 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.

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
MySQL: не поддающийся мне SELECT :)
« Ответ #1 : 08 Июня 2004, 01:39:28 »
нельзя
(не считая варианта с ХП в mysql5)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL: не поддающийся мне SELECT :)
« Ответ #2 : 08 Июня 2004, 17:16:58 »
см.  функция GROUP_CONCAT()

правда она только с версии 4.1.
На Машине Тьюринга далеко не уедешь.

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
MySQL: не поддающийся мне SELECT :)
« Ответ #3 : 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?

Оффлайн fidget

  • Непоседа
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 607
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
MySQL: не поддающийся мне SELECT :)
« Ответ #4 : 08 Июня 2004, 18:26:54 »
> Что из этого лучше? А то слово alpha меня смущает.

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

> ХП в mysql5?

хранимые процедуры.
На Машине Тьюринга далеко не уедешь.

Оффлайн Лосик

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 6
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
MySQL: не поддающийся мне SELECT :)
« Ответ #5 : 14 Июня 2004, 21:58:52 »
А переход к более традиционной структуре (таблица "Люди", таблица "Мылы", таблица "Телефоны" связанные по Люди.ID) не?..

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
MySQL: не поддающийся мне SELECT :)
« Ответ #6 : 15 Июня 2004, 11:58:02 »
Не. :)
Я же писал, что люди приведены в качестве простого примера.

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

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

Оффлайн Rel

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 142
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gauer.tk
MySQL: не поддающийся мне SELECT :)
« Ответ #7 : 16 Июня 2004, 18:01:55 »
как вы лодку назовете - так она и поплывет

так и с твоей бд, Forza
Forgive him father, he just a robot from the future...
(c) Jesus Christ

Оффлайн Forza

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 288
  • +0/-0
  • 0
    • Просмотр профиля
MySQL: не поддающийся мне SELECT :)
« Ответ #8 : 16 Июня 2004, 19:01:12 »
Откуда ты знаешь, как я её назвал? ;)

Оффлайн CLiI{er

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 57
  • +0/-0
  • 0
    • Просмотр профиля
    • http://glossword.info/
MySQL: не поддающийся мне SELECT :)
« Ответ #9 : 23 Июня 2004, 14:07:15 »
Точно в указанной форме вывести нельзя, но это не является проблемой.
Нужно немного доработать вывод на страницу.
Сначала построить массив по person_id, затем выводить содержимое массива, а не данных из mysql_result.
Например:
$array[$rows[\'person_id\']][] = $rows;
gw веб-песочница жж

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28