Mysql проблема соединения между 5 таблицами - PullRequest
0 голосов
/ 17 августа 2011

Извините за мой английский, я из Австрии, но я не смог найти другой хороший вопрос.:)

У меня очень странная структурированная база данных mysql.Сначала есть таблица для пользователей, для моего примера есть только три интересных столбца:

id, name, email
  • Моя вторая таблица - это таблица событий: id, name
  • Мой третийтаблица представляет собой таблицу категорий для событий: id, name, eventID
  • Моя четвертая таблица является таблицей подкатегории для событий: id, name, catID
  • Моя пятая таблица является расписаниемдля событий: id, name, ucatID
  • Моя шестая таблица - это таблица, в которой запись объединяет время с человеком

В некотором роде это план работы..

  1. пользователи: идентификатор, имя, адрес электронной почты
  2. события: идентификатор, имя
  3. категории: идентификатор, имя, идентификатор события
  4. подкатегории: идентификатор, name, catID
  5. подкатегории: id, name, ucatID
  6. таблица для присоединения: id, userID, uucatID

Да, у меня пока есть каждая запись(user-name, ucat-name, uucat-name) ... но я пытаюсь получить список людей, у которых нет записи в объединенной таблице!(но только там, где идентификатор события ... скажем 1 ^^)

Вот мой код для списка, в котором есть запись:

SELECT a.*,b.name,c.name AS zeit,d.name AS kategorie
FROM intern_user AS b
INNER JOIN intern_dienstplan AS a ON a.userID=b.id
INNER JOIN intern_events_uucat AS c ON a.uucatID=c.id
INNER JOIN intern_events_ucat AS d ON c.ucatID=d.id
INNER JOIN intern_events_cat AS e ON d.catID=e.id
WHERE e.eventID='".$_POST['eventid']."'
ORDER BY b.name ASC

Я надеюсь, что кто-то может мне помочь... Я уже пробовал что-то с "a.id is null" (где нет записи в объединяемой таблице), но это не работает.

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Прошло много времени ... и я нашел решение для моей проблемы.:]

Вот код, для других с такой же проблемой ...

SELECT *
FROM intern_user
WHERE 
(
    id NOT IN 
    (
            SELECT a.userID
        FROM intern_dienstplan AS a
        INNER JOIN intern_events_uucat AS b ON a.uucatID=b.id
        INNER JOIN intern_events_ucat as c ON b.ucatID=c.id
        INNER JOIN intern_events_cat AS d ON c.catID=d.id
                WHERE d.eventID='".$_POST['eventid']."'
        GROUP BY a.userID
        HAVING sum(b.wert) >= 100
    )
)
AND status='1'

Спасибо за помощь и повеселиться с этим дерьмом.: D

Привет

0 голосов
/ 17 августа 2011

Непонятно, каков тип соединения для категорий-подкатегорий-подкатегорий. Сколько подкатегорий может иметь событие (0-1-N)?

Если вы просто хотите найти людей, у которых нет соответствующей записи в таблице ссылок, вы можете использовать запрос:

select a.*
from user a
left join link b on a.id = b.userId
where b.userId is null

или

select a.*
from user a
where id not in (select userId from link)

Обновление. До сих пор нет ответа на вопрос выше. Вы можете попробовать:

select *
from users
where id not in (
    select link.userId
    from event a
    inner join categories ...
    inner join subcategories ...
    inner join categories ...
    inner join link ...
    where a.eventId = ...)

Может быть легко преобразовано в версии с левым соединением или существует ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...