我们说我有这个MySQL表:
好的..看看type
字段?类型0
是指一个人知道,语言和类型1
是一个人学习该语言的时候。
让我们说我有一些数据:
如您所见,成员3
与uid
(用户ID)对应。用户3
因为0
类型而知道中文,但由于1
类型,用户1
在哪里学习中文。
最后,让我们说我做了一个表格。它有两个select
字段,其中填充了一系列语言选择。在某次提交后...... $lang_learning
输出zh
和$language_know
输出en
。我如何找到一个说zh
并且正在学习en
但没有与language
字段冲突的人,因为您实际上是在寻找它两次?
感谢。
答案 0 :(得分:3)
您需要自我加入。试试这个。
SELECT t1.uid
FROM languages t1
INNER JOIN languages t2 ON t1.uid = t2.uid
WHERE t1.language = 'zh' AND t1.type = 0
AND t2.language = 'en' AND t2.type = 1;
答案 1 :(得分:0)
你不能用简单的查询来做,因为标准的'where'子句逐行考虑记录。简单查询无法“在一个记录中选择字段X为'a'的记录,而在另一个记录中字段X为'b'。
为此,您需要加入:
SELECT knows.uid
FROM yourtable AS knows
INNER JOIN yourtable AS learning ON knows.uid = learning.uid
WHERE (knows.language='zh' AND knows.type=0) AND (learning.language='en' AND knows.type=1)