【问题标题】:Select Command & Join Issue选择命令并加入问题
【发布时间】:2013-04-09 18:42:23
【问题描述】:

我有两张桌子

1: USERS

user_id | user_state | user_email

2: CONTACTS

contact_id | contact_name | contact_state | contact_email | contact_info

我想要做的是让 select 回显“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 子句'中的未知列'...'”

希望有人可以帮助我。

【问题讨论】:

  • 检查ON 子句,你必须从数据库表中指定field name
  • 不要将参数直接传递给查询,这使得它容易受到 sql 注入。阅读手册here..

标签: php select join login


【解决方案1】:

检查JOIN子句中的条件

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

【讨论】:

    【解决方案2】:

    只需将您的 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"
    

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

    注意您没有通过ASCDESC 指明您想要订购的任何东西,所以我假设您已经将它存储在$limit 变量中

    【讨论】:

    • 这个答案与我想出的答案相似,但与我的答案一样,它不断重复结果两次。我做了一些测试,发现如果我更改其他用户的状态,它会以相同的次数回显结果,并且有那么多用户。 IE:一个用户一个状态,回显一次结果,三个状态相同的用户回显结果3次。
    • 这是因为你需要做相反的事情,让我来解决它
    【解决方案3】:

    试试这个

    "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"
    

    【讨论】:

      【解决方案4】:

      试试这个查询..

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

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

      【讨论】:

      • 我认为这是最好的选择,但它不会带来任何结果。不知道为什么。只需检查我的会话值并检查我是否遗漏了什么。
      • @Rocsha 是的,您需要检查会话 ID,然后将其传递给查询
      • “将其传递给查询”是什么意思?
      • 您的会话 id.. 将其传递给查询装置,只需将我的变量 $_SESSION['id'] 更改为您的 user_id = session_id
      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 2010-11-29
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      相关资源
      最近更新 更多