2

我有两张桌子

1: USERS

user_id | user_state | user_email

2: CONTACTS

contact_id | contact_name | contact_state | contact_email | contact_info

我想要做的是让选择回显“user_state”(即登录用户状态)等于contact_state的所有“CONTACTS”数据。

"SELECT * FROM contacts
INNER JOIN users
ON contact_state = ".$row_userinfo['user_state']."
WHERE contact_state = ".$row_userinfo["user_state"]." 
ORDER BY contact_name $limit");
?> 

我遇到的问题是它不仅显示与登录用户状态(user_state)匹配的数据

并且使用上面的代码(我不确定以我想要的方式工作是否正确)提出“'where子句'中的“未知列'......'”

希望有人可以帮助我。

4

4 回答 4

1

试试这个查询..

("SELECT contacts.*
FROM users, contacts
WHERE users.user_state = contacts.contact_state AND user_id = '".$_SESSION['id']."'");

$_SESSION['id']是您当前用户的登录 ID。

于 2013-04-17T06:04:31.607 回答
0

检查JOIN条款中的条件

("SELECT * FROM contacts
INNER JOIN users ON contact_state = user_state
WHERE contact_state = ".$row_userinfo["user_state"]." 
ORDER BY contact_name $limit");
于 2013-04-17T06:02:12.637 回答
0

只需将您的 ON 子句更改为

SELECT * FROM `users` a
JOIN `contacts` b
ON a.`user_state` = b.`contact_state`
WHERE a.`user_state` = '".$row_userinfo["user_state"]."' 
ORDER BY b.`contact_name` $limit"

这是因为您正在比较两个表,并且需要声明选择两个表的哪些字段进行比较

请注意,您并没有指明要订购的任何东西,ASC所以DESC我假设您已经将其存储在$limit变量中

于 2013-04-17T06:02:40.873 回答
0

尝试这个

"SELECT c.* FROM contacts c
 JOIN users u
ON c.contact_state = u.user_state
WHERE c.contact_state = ".$row_userinfo["user_state"]." 
ORDER BY c.contact_name $limit"
于 2013-04-17T06:04:30.847 回答