0

对不起我的英语,我来自奥地利,但我找不到另一个不错的问答板。:)

我有一个非常奇怪的结构化 mysql 数据库。首先有一个用户表,对于我的示例,只有三个有趣的列:

id, name, email
  • 我的第二个表是事件表:id,name
  • 我的第三个表是事件的类别表:id、name、eventID
  • 我的第四个表是事件的分类表:id、name、catID
  • 我的第五张表是事件时间表:id、name、ucatID
  • 我的第六张桌子是一张桌子,其中一个条目结合了时间和人

它是一个工作计划,在某种程度上......

  1. 用户:ID、姓名、电子邮件
  2. 事件:id,名称
  3. 类别:id、name、eventID
  4. undercategories: id, name, catID
  5. underundercategories: id, name, ucatID
  6. 要加入的表:id、userID、uucatID

是的,到目前为止,我有每个条目(user-name, ucat-name, uucat-name)......但我正在尝试获取在连接表中没有条目的人的列表!(但仅限于 eventID 所在的位置......比如 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”(连接表中没有条目),但它不起作用。

4

2 回答 2

1

很长一段时间过去了……我找到了解决问题的方法。:]

这里的代码,对于其他有同样问题的人......

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

问候

于 2011-08-29T17:16:00.650 回答
0

目前尚不清楚categories-subcategories-subsubcategories 的连接类型是什么。有多少子类别可以有事件(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 = ...)

它可以很容易地转换为带有左连接或存在()的版本。

于 2011-08-17T10:05:18.430 回答