我有两个表,其中包含一个巨大的项目列表,另一个表格用于交易这些项目。
以下是示例表:
主表
| 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);
此代码不起作用。关于这个的任何想法?
答案 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字段的外键,因为您没有指定它。