此查询的替代方案?

时间:2011-11-18 08:36:10

标签: php mysql

我正试图找出'x'的朋友是谁,并使用该数据数组来查询另一个表。

到目前为止我所拥有的是

<?
session_start();
$user = $_SESSION['username'];
include($_SERVER['DOCUMENT_ROOT'].'/assets/global/scripts/***.php');
$data = mysql_query("SELECT * FROM hotm**e_rates WHERE (SELECT * FROM hot**e_friends WHERE f1='$user' OR f2='$user') ORDER BY id LIMIT 0,1");
$row = mysql_fetch_assoc($data);
if($row['f1']==$user) {
echo $row['f2'];
}else{
echo $row['f1'];
}
?>

那不起作用。 :( 错误是返回val是一个bool。

有关如何解决此问题或使用替代方法的任何想法?

谢谢! :d

2 个答案:

答案 0 :(得分:1)

返回的值是bool,因为MYSQL查询中发生错误。 您必须设置WHERE [main_query_table] = (SELECT [table_field] FROM hot**e_friends WHERE f1='$user' OR f2='$user')

之类的内容

参考文献:

答案 1 :(得分:0)

我认为你不能像Jeff所说的那样做 - 如果用户拥有超过1个友谊,那么它将失败,因为子查询将返回多行。我假设hotm ** e_rates表中有一个字段'username',我们可以用来加入。我还假设您希望获得与$ user的朋友关联的所有_rates:

SELECT
    r.*,
    f.f1,
    f.f2
FROM
    hotm**e_rates   r,
    hotm**e_friends f
WHERE
    (f.f1 = '$user'
AND r.username = f.f2)
OR  (f.f2 = '$user'
AND r.username = f.f1)

我不完全确定上述内容是否有效,因为它会在不同的字段上动态加入......这可能会有问题而且我没有测试过,如果它不起作用那么你应该能够做到这一点使用union,分别连接f1和f2并将结果集合并在一起:

(   SELECT
        r.*,
        f.f1,
        f.f2
    FROM
        hotm**e_rates   r,
        hotm**e_friends f
    WHERE
        f.f1 = '$user'
    AND r.username = f.f2
) UNION (
   SELECT
        r.*,
        f.f1,
        f.f2
    FROM
        hotm**e_rates   r,
        hotm**e_friends f
    WHERE
        f.f2 = '$user'
    AND r.username = f.f1
)