【问题标题】:MySQL query involving three stages and two tablesMySQL查询涉及三个阶段和两个表
【发布时间】:2012-12-18 03:57:28
【问题描述】:

数据库:

  • xx_users (id, name, user_id, email, location)
  • xx_questions(id、问题、描述、user_id)

代码:

$friends = $facebook->api('/me/friends');
$arr= $friends['data'];
$friend_ids_arr = array();
foreach($arr as $friend) {
    $friend_ids_arr[] = $friend['id'];
}

$sql = "SELECT (SELECT * FROM xx_questions WHERE user_id IN (" . implode(',', $friend_ids_arr) . ") OR user_id = '$user' ORDER BY time DESC) (SELECT * from questions INNER JOIN users ON users.user_id = questions.user_id WHERE users.location = 'Cambridge, Cambridgeshire')";    
$data = mysql_query($sql) or die(mysql_error());

while ($row = mysql_fetch_assoc($data)) {
       // echo values from what's been selected
}

如果出现以下三种情况中的任何一种,我正在尝试从xx_questions(已由用户发布)中选择问题:

  1. 发帖人的 user_id 与当前用户的一位朋友(即发帖人和用户是朋友)匹配的值
  2. 发帖人的 user_id 与用户的值匹配的那些值(即发帖人就是用户)
  3. 发布者的位置与当前用户的位置匹配的值(即发布者和用户当前位于同一城市)

我已经设法使 1 和 2 起作用,但是当我尝试引入 3 时出现问题,所以我的两个问题是:

  1. 3 的正确 MySQL 是什么?
  2. 如何与 1 和 2 集成?

提前致谢,如果您需要更多信息,请告诉我。

【问题讨论】:

  • 表“xx_questions”和“post”是什么关系?
  • 不是答案,只是对您的代码的注释:user_id IN (value1, value2, ...) OR user_id = some_value 等同于 user_id IN (value1, value2, ..., some_value)
  • @Nathan,抱歉,打错了。请参阅更正。

标签: php mysql sql


【解决方案1】:

要获取您想要的信息,您需要将 xx_questions 加入 xx_users。类似以下的内容会返回符合以下三个条件之一的问题:

select *
from xx_questions q join
     xx_users u
     on q.user_id = u.user_id
where q.user_id in (<implode(',', $friend_ids_arr)>) or
      q.user_id = '$user' or
      u.location = (select location from xx_users where USER_ID = $user)

我写的更像是 SQL 而不是字符串,所以更容易阅读。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2011-02-18
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多