这应该是一个基本问题,但是我很久没有使用过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结果资源
我该怎么做?我错过了什么?你能举个例子吗?
提前致谢!我一定会接受这个有效的答案!
答案 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