如何比较2个寻找缺失物品的表格

时间:2010-09-20 14:58:39

标签: php mysql comparison

我有两个表,其中包含一个巨大的项目列表,另一个表格用于交易这些项目。

以下是示例表:

主表

| ID | TITLE | STATUS | TRADE |
-------------------------------
|  1 | test1 |    1   |   1   |
|  2 | test2 |    1   |   1   |
|  3 | test3 |    1   |   0   |
|  4 | test4 |    0   |   1   |

交易表

| ID | TRADER | ITEM | URL                           |
------------------------------------------------------
|  1 |    2   |   1  | HTTP://www.test.com/itemOne   |
|  2 |    5   |   3  | HTTP://www.test.com/itemThree |
|  3 |    5   |   4  | HTTP://www.test.com/itemFour  |

假设我想要一个交易者5没有交易的所有项目的清单,状态为1.因此,当交易者5进入该网站时,他们将能够选择要交易的剩余项目。 / p>

以下是我的尝试:

$sql = "SELECT m.id, m.title
        FROM main AS m, trade AS t 
        WHERE m.trade >= 1 && m.status = 1 && 
        t.trader <>". mysql_real_escape_string($traderID);

此代码不起作用。关于这个的任何想法?

2 个答案:

答案 0 :(得分:1)

我不清楚Trades中的哪一列是Main的FK。下面,我假设它是Item列:

select m.id, m.title 
from Main m 
where not exists (
    select * 
    from trade 
    where m.id = item 
        and trader = 5
)
    and m.status = 1

答案 1 :(得分:0)

试试这个:

SELECT id, title FROM main 
WHERE status = 1 AND id NOT IN 
      (SELECT item FROM trade WHERE trader = 5);

这将获取main中每个title的状态为1的列表,但是根据子查询限制项目,子查询获取交易者5已经交易的ID列表(即项目“不在”中交易商交易的商品清单5)。

我会留给您更新要根据需要参数化的查询。

请注意,我假设交易中的项目是main中id字段的外键,因为您没有指定它。