За последние 24 часа нас посетили 16657 программистов и 1650 роботов. Сейчас ищут 2068 программистов ...

Объединение трех таблиц

Тема в разделе "MySQL", создана пользователем ShamahN, 23 май 2008.

  1. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Подобную тему прочитал, уяснил! Не удаляйте пост сразу!! :)
    Проблема следующая. Делаю выборочку, у меня на локалхосте все выбирается нормально. Но как только сливаю все хостеру, результатом выборки являются 0 строк. Давайте проверим вместе:
    Табличка №1 (tbelementspec) так сказать табличка со свойствами элемента
    Код (Text):
    1. +-----------+-----------------+
    2. | Field     | Type            |
    3. +-----------+-----------------+
    4. | idElement | int(10)         |
    5. | idChar    | int(10)         |
    6. | value     | char(100)       |
    7. | mainChar  | int(1) unsigned |
    8. | sort      | smallint(3)     |
    9. +-----------+-----------------+
    Табличка №2 (tbcharacteristicsdefinition) -табличка с описанием свойств
    Код (Text):
    1. +---------+------------------+
    2. | Field   | Type             |
    3. +---------+------------------+
    4. | id      | int(10) unsigned |
    5. | idGroup | int(3)           |
    6. | def     | varchar(50)      |
    7. | fullDef | tinytext         |
    8. | EI      | varchar(20)      |
    9. | sort    | smallint(3)      |
    10. +---------+------------------+
    и, Табличка 3 (tbcharsgroups) - табличка с описанием группы свойств
    Код (Text):
    1. +-----------+----------------------+
    2. | Field     | Type                 |
    3. +-----------+----------------------+
    4. | id        | smallint(3) unsigned |
    5. | groupName | varchar(255)         |
    6. | sort      | smallint(6)          |
    7. +-----------+----------------------+
    В общем как бы, Элемнет может обладать произвольным набором свойств. В первой таблице idElement - указатель элемента, idChar - указатель на свойство. В свою очередь, tbcharacteristicsdefinition и ее поле idGroup - указатель на знаечение группы свойств, к которой свойство относится.
    Опишем словесами, что нам надо получить: Выбрать из первой таблицы все записи с определенным значением idElement, присоединить записи из второй таблички по id, и ко всему этому присоединить еще и третью
    Вот реализация:
    [sql]SELECT
    tbelementspec.idElement,
    tbelementspec.idChar,
    tbelementspec.value,
    tbelementspec.mainChar,
    tbelementspec.sort,
    tbcharacteristicsdefinition.id,
    tbcharacteristicsdefinition.idGroup,
    tbcharacteristicsdefinition.def,
    tbcharacteristicsdefinition.fullDef,
    tbcharacteristicsdefinition.EI,
    tbcharacteristicsdefinition.sort,
    tbcharsgroups.id,
    tbcharsgroups.groupName,
    tbcharsgroups.sort
    FROM
    tbelementspec
    Inner Join tbcharacteristicsdefinition ON tbelementspec.idChar = tbcharacteristicsdefinition.id
    Inner Join tbcharsgroups ON tbcharacteristicsdefinition.idGroup = tbcharsgroups.id
    ORDER BY
    tbcharsgroups.sort ASC,
    tbelementspec.sort ASC[/sql]
    Тут не используется условие по идЕлемент, но это нарочно, чтобы хотя бы все выбрал.
     
  2. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Нельзя было так?
    [sql]tbelementspec.*
    tbcharacteristicsdefinition.*,
    tbcharsgroups.*,[/sql]
     
  3. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.
    Kreker, можно. :) просто у меня там еще алиасы :)
     
  4. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    ShamahN
    Чтобы народ тестировал у себя, сделайте дамп своей базы и выложите.
     
  5. ShamahN

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

    С нами с:
    10 апр 2007
    Сообщения:
    1.449
    Симпатии:
    0
    Адрес:
    г.Волгодонск Роствской обл.