За последние 24 часа нас посетили 21042 программиста и 1623 робота. Сейчас ищет 1571 программист ...

возврат повторяющихся полей

Тема в разделе "PHP и базы данных", создана пользователем apajan, 4 апр 2010.

  1. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    в базе есть несколько таблиц, например: a, b, c, d и e.
    в таблице "a" имеется поле name со значением 1 и поле surname со значением 6
    в таблице "b" имеется поле name со значением 2 и поле surname со значением 7
    в таблице "c" имеется поле name со значением 3 и поле surname со значением 8
    в таблице "d" имеется поле name со значением 1 и поле surname со значением 9
    в таблице "e" имеется поле name со значением 5 и поле surname со значением 10

    как сделать так, чтобы php скрипт возвращал повторяющиеся значения поля name из всех таблиц, с соответсвующими значениями поля surname?
    пример результата:

    (названия полей возвращать необязательно, они прописаны в результате вручную)

    name
    1;2;3;4

    surname
    6,9;7;8;10;

    поле name из таблицы "d" отсутствует в результате, т.к. его значение равно значению поля name в таблице "a".

    доп. задание: поле surname повторяющихся значений иметь не может, поэтому, необходимо, чтобы значения поля surname возвращались в возврастающем порядке в той-же строке, что и значение повторяющегося поля name. (поле surname имеет формат TIME)
    пример:
    1 6,9
    2 7
    3 8
    5 10

    если что-то из вопроса неясно - спрашивайте.
    спасибо.
     
  2. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    не понятно, почему однотипые данные «name» и «surname» разнесены по разным таблицам, а не в одной
     
  3. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    surname это только название поля, к содержимому отношения не имеет. содержимое в формате time.
    на всякий случай: содержимое полей name в формате longtext
     
  4. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    могу переделать таблицу для удобства, если необходимо. Суть вопроса останется прежней.
    всего значений поля name или surname может быть максимум 10 (табличка небольшая)
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    Скажи для чего это. Сомневаюсь, что твои фантазии на тему и реальность где-то сходятся…

    допустим, у нас
    [sql]CREATE TABLE IF NOT EXISTS `test_table` (
    `id` int(10) unsigned NOT NULL auto_increment,
    `name` varchar(20) NOT NULL,
    `surname` int(11) NOT NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT AUTO_INCREMENT=1 ;


    INSERT INTO `test_table` (`id`, `name`, `surname`) VALUES
    (1, '1', 6),
    (2, '2', 7),
    (3, '3', 8),
    (4, '1', 9),
    (5, '5', 10);[/sql]

    выбрать запросом данные так, чтобы вернуло
    не получится — количество результатов в разных столбцах не совпадает.
    => выбираем данные

    [sql]SELECT * FROM test_table ORDER BY `surname` ASC[/sql]
    потом в php
    PHP:
    1. <?php
    2. $rows = array();
    3. while ($row = mysql_fetch_assoc($res)) {
    4.     $rows[$row['name']][] = $row['surname'];
    5. }
    6. ?>
    и в $rows имеем
    Код (Text):
    1. Array
    2. (
    3.     [1] => Array
    4.         (
    5.             [0] => 6
    6.             [1] => 9
    7.         )
    8.  
    9.     [2] => Array
    10.         (
    11.             [0] => 7
    12.         )
    13.  
    14.     [3] => Array
    15.         (
    16.             [0] => 8
    17.         )
    18.  
    19.     [5] => Array
    20.         (
    21.             [0] => 10
    22.         )
    23.  
    24. )
    где ключи 1,2,3,5 — значения name, а вложенные массивы сожержат заначения из surname
     
  6. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    я Вам на почту отправил полное описание проблемы. Посмотрите, пожалуйста.
    прошу прощения за введение в заблуждение..
     
  7. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    на почту просто так не интересно, но раз уж так шифруемся, то общее описание проблемы:
    есть набор уникальных элементов и их свойства (в частности время). Одному элементу может принадлежать несколько свойств. Одно свойство может принадлежать разным элементам.
    Задача: вывести элемент и свойства.

    Решение:
    Простая связь многие ко многим.
    3 таблицы:
    • 1. Элементы (id элемента, имя элемента)
      2. Свойства (id свойства, имя свойства)
      3. Связь (id элемента, id свойства)

    ну, и выбрать элементы и свойства пары которых указаны в «Связь»
     
  8. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    Ладно, без шифра =)
    вот, что я написал на почту:

     
  9. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    И так. Если я буду действовать старым методом, в таблице 1 (элементы) будут повторяющиеся элементы.
     
  10. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    что-ж делать-то?
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    готовые решения в таком объёме уже не интересно.
    Можете из первого примера взять массив и склеить, или сделать связь много ко многим, что есть правильней.
    В любом случае, вы правы, что-то делать точно надо.
     
  12. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    готовые и не хочу.
    ладно, буду разбираться...
     
  13. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    есть вот такой массив:
    PHP:
    1. $query1 = ("SELECT*FROM shedule WHERE name='$fn'") or die(mysql_error());
    2. $result1=mysql_query($query1);
    3.  
    4. while($r1=mysql_fetch_array($result1)) {
    5. $rtime=$r1[time];
    как $rtime превратить в строку с текстом, в котором указаны значения всех элементов массива?
     
  14. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    PHP:
    1. <?php
    2. $rtime[] = $r1['time'];
    3.  
    4. $time = implode(', ', $rtime);
    5. ?>
    это?
     
  15. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
  16. apajan

    apajan Активный пользователь

    С нами с:
    2 апр 2010
    Сообщения:
    26
    Симпатии:
    0
    Luge, да - оно, спасибо.
    в общем-то, я сделал, что хотел =) осталось сделать пользовательскую часть