0

我有个问题。我真的不知道到底要做什么。我似乎不知道如何限制我的查询。

例如。

t1有 5 列。. .

   username, itemA, itemB, itemC, itemD

itemA 到 itemD 的列是来自 的主键t2t2有 2 列,ID 和项目。

t2包含 ID、项目。它在ITEMS下有4行。. .`

  shirt,socks,short,pants.

用户名 dadit1有 2 个条目,用于 itemA 的衬衫和用于 itemB 的袜子。其余 2 个字段为空。我如何执行一个查询,告诉我用户名 Dadi 有 2 个缺失的条目 short 和pants?

为了进一步解释..我想执行一个查询,将 itemC 和 itemD 的 $rows 显示为短裤和裤子,因为它们在 t1 中丢失。结果将显示短裤和裤子,而不是前两个,因为用户 'Dadi' 已经将衬衫和袜子分别作为 itemA 和 itemB。

4

2 回答 2

0

好吧,您将检查该字段是否为空/空,具体取决于您在表中定义的默认值。这可以通过几种方式完成,或者获取 Dadi 的行,然后使用 PHP 检查该列是否为 NULL,或者使用 select 语句选择所有缺少 itemC 和 itemD 值的用户:

从 t1 中选择用户名,其中 t1.itemC 为空,t1.itemD 为空

于 2013-05-10T12:51:12.373 回答
0

如果您想将项目 ID 保留在 中t1,并且t2只包含这 4 个项目,那么您可以执行类似的操作

SELECT t2.items
FROM t2
  LEFT JOIN t1 ON (
    (t1.id = :userid) AND
    (t2.id IN (t2.item1, t2.item2, t2.item3, t2.item4))
  )
WHERE t1.id IS NULL

我认为这应该为您提供包含具有 id 的用户未佩戴的每个项目:userid

但是,正如已经提到的,这通常是一种非常糟糕的方法。如果您的 4 个项目是刻在石头上的,则t2不需要存在,并且t1应该具有说明用户是否拥有每个项目的布尔字段。否则,您通常需要一个 (user id, item id) 行表来确定谁穿什么。例如,这样做可以防止某人穿两条裤子......并且可以让您随意添加项目而无需在表格中添加列(如果表格有很多行,这可能会花费大量时间在里面)。

于 2013-05-10T13:26:24.803 回答