2014-09-03 94 views
0

这应该是一个基本问题,但我很长一段时间没有使用Mysql,并忘记了所有基本的东西。所以SO程序员请耐心等待。Mysql - 使用INNER JOIN错误从2个表中选择列

我有2个表所示:

表1(事件):here

表2(用户):here

我想在事件表中选择所有行event_invitees包含一个用户名。我能做到这一点使用:

SELECT * FROM meetmeup_events WHERE event_invitees LIKE '%$username%' 

现在,我想也选择从用户表(列称为user_userphoto)的event_invitees的照片。我尝试这是这样的:

$result = mysql_query("SELECT meetmeup_events.*, meetmeup_user.user_photo 
         FROM meetmeup_events 
         WHERE event_invitees LIKE '%$username%' 
         INNER JOIN meetmeup_user 
          ON meetmeup_user.user_username = meetmeup_events.event_inviter"); 

$rows = array(); 
    while($r = mysql_fetch_assoc($result)) { 
    $rows['meetmeup_user'][] = $r; 
    } 

echo json_encode($rows); 

这给了我一个错误:mysql_fetch_assoc():提供的参数不是一个有效的MySQL结果资源

我怎样才能做到这一点?我错过了什么?你能举几个例子吗?

在此先感谢!我一定会接受工作答案!

+2

你的查询语法出了故障。 'WHERE'子句必须位于'FROM'子句和所有'JOIN'之后。一定要检查错误:'mysql_query()'调用后'if(!$ result)echo mysql_error();'' – 2014-09-03 16:07:43

+0

备注:另请参见[为什么不应该在PHP中使用mysql_函数](http:// stackoverflow。问题/ 12859942/why-shouldnt -i-use-mysql-functions-in-php) – 2014-09-03 16:09:33

+0

@MichaelBerkowski通过你所说的做。错误消失了,但json是空的。 mysql查询中有更多错误吗? – BuddyBud 2014-09-03 16:10:38

回答

1

它只是一个获取查询正确的顺序编码,你可能想使它多了几分可管理通过使用别名对表名

尝试的事情是: -

SELECT me.*, 
     mu.user_photo 
FROM meetmeup_events me 
    INNER JOIN meetmeup_user mu ON mu.user_username = me.event_inviter 
WHERE me.event_invitees LIKE '%$username%' 

当然,这假设所有的列名是正确的,mu.user_username = me.event_inviter事实上确实让SENCE,因为这些领域实际上等于

其他建议 你实际上并没有发出由mysql执行的查询。

你必须这样做: -

$sql = "SELECT me.*, 
      mu.user_photo 
     FROM meetmeup_events me 
      INNER JOIN meetmeup_user mu ON mu.user_username = me.event_inviter 
     WHERE me.event_invitees LIKE '%$username%'"; 

$result = mysql_query($sql); 

$rows = array('mysql_count' => mysql_num_rows($result)); 

while($r = mysql_fetch_assoc($result)) { 
    $rows['meetmeup_user'][] = $r; 
} 

echo json_encode($rows); 

现在使用JavaScript调试器看看返回的数据浏览器。即使没有'meetmeup_user'数组,也应该至少有一个mysql_count字段,如果它为零,则知道它没有发现任何使用您的条件。

+0

感谢您的回答。我试过你的代码,错误消失了。但我仍然不明白为什么JSON返回空?你能帮我进一步吗? – BuddyBud 2014-09-03 16:30:06

+0

查看更多建议 – RiggsFolly 2014-09-03 21:30:00

0

您应该将您的mysql函数更改为mysqli/PDO,尽管问题似乎是查询itsef。应该是:

SELECT meetmeup_events.*, meetmeup_user.user_photo 
FROM meetmeup_events 
INNER JOIN meetmeup_user 
ON meetmeup_user.user_username = meetmeup_events.event_inviter 
WHERE event_invitees LIKE '%$username%' 

(末尾的WHERE条款)

的Sql小提琴演示:http://sqlfiddle.com/#!2/852a2/1

+0

什么是'invitee3'? – BuddyBud 2014-09-03 16:25:10

+0

只是一个测试值 – lpg 2014-09-03 16:26:28

+0

感谢您的答案。错误消失了,但不知何故JSON返回空。我错过了什么? – BuddyBud 2014-09-03 16:30:55