Mysql - 使用INNER JOIN错误从2个表中选择列

时间:2014-09-03 16:05:10

标签: php mysql sql

这应该是一个基本问题,但是我很久没有使用过Mysql而忘记了所有基本的东西。所以SO程序员请耐心等待。

我有2张这样的表:

表1(事件):here

表2(用户):here

我想在事件表中选择event_invitees包含用户名的所有行。我能够这样做:

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

现在,我还要从用户表(event_invitees列)中选择user_userphoto的照片。我对此的尝试是这样的:

$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 个答案:

答案 0 :(得分: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实际上确实存在,因为这些字段实际上是相等的

其他建议 您实际上并没有发出查询以供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调试器查看返回的数据。即使没有mysql_count数组,也应该至少有一个'meetmeup_user'字段,如果它为零,你知道它没有使用你的标准。

答案 1 :(得分: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