繁体   English   中英

多表的sql条件

[英]sql condition for multi table

今天是个好日子,

我想问一个关于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行,并且无法与tuser表中要加入的任何id_user匹配,因此这里的问题是动态填充tstatus字段可以填充或将其清空。

有人可以在不修改表结构的情况下帮助我修复查询吗?

谢谢

据我所知,我相信您正在寻找这样的东西:

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字段的值都将为NULL

您可以进行左连接,以便所有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

改用左联接。

SELECT tu.*, ts.status FROM tuser tu
LEFT JOIN tstatus ts ON tu.id_user = ts.id_user
WHERE tu.level ='teacher'

您可以根据需要添加其他where语句

使用左联接。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM