大家好日子,
我想问一个关于SQL的问题 我有2张桌子:
tuser (
id_user,
username,
password,
name,
level
)
tstatus(
id_status,
id_user,
status)
* tuser有5行 tstatus有2行
我在做这个查询
SELECT *
FROM tuser,tstatus
WHERE tuser.id_user = tstatus.id_user
AND tuser.level = 'teacher'
AND tuser.name LIKE '%" . $queryString . "%'
ORDER BY tuser.name
LIMIT 5
mysql_fetch_array的结果只返回2行用户数据。
这是因为tstatus表只有2行且无法匹配任何id_user加入到tuser表中,这里的问题是动态填充tstatus字段可以填充或者为空它。
有人可以帮我修改查询而不修改表结构吗?
感谢
答案 0 :(得分:0)
尽我能理解你,我相信你正在寻找这样的东西:
SELECT
*
FROM
tuser
LEFT JOIN
tstatus USING (id_user)
WHERE
tuser.level = 'teacher'
AND
tuser.name LIKE '%" . $queryString . "%'
ORDER BY
tuser.name
LIMIT 5
这将选择具有“教师”级别和包含查询字符串的名称的所有用户 - 即使是那些没有相应状态的用户(任何tstatus
字段的值将为{ {1}}。
答案 1 :(得分:0)
你可以进行左连接,以便所有的tuser都在那里:
SELECT * FROM tuser left join tstatus on tuser.id_user = tstatus.id_user WHERE tuser.level = 'teacher' and tuser.name LIKE '%" . $queryString . "%' ORDER BY tuser.name LIMIT 5
答案 2 :(得分:0)
改为使用左连接。
SELECT tu.*, ts.status FROM tuser tu
LEFT JOIN tstatus ts ON tu.id_user = ts.id_user
WHERE tu.level ='teacher'
您可以根据需要添加其他where语句
答案 3 :(得分:0)
使用左连接。 USING关键字将删除重复的user_id字段。
SELECT *
FROM tuser tu
LEFT JOIN tstatus ts USING (user_id)
WHERE tu.level ='teacher'
AND tuser.name LIKE '%" . $queryString . "%'
ORDER BY tuser.name
LIMIT 5