我想在登录网站时显示属于我的任何用户的数据,以及每个表的名称(他们完成了对它们的报价)。
这是我使用的代码,但是当我添加它时它不起作用。
$result = mysql_query('SELECT *,\'tbl1\' AS tablename FROM (SELECT * FROM table1 WHERE user_id='$user_id') as tbl1 UNION SELECT *,\'tbl2\' AS tablename FROM (SELECT * FROM table1 WHERE user_id='$user_id') as tbl2'. ' ORDER BY `date` DESC');
while($sdata = mysql_fetch_array($result)){
echo $sdata['date'];
echo $sdata['tablename'];
echo $sdata['user_reward'];
}
我在哪里弄错了?
答案 0 :(得分:1)
您在$user_id
附近缺少连接运算符:
$result = mysql_query(
'SELECT *,\'tbl1\' AS tablename FROM (
SELECT * FROM table1 WHERE user_id=' . $user_id . '
) as tbl1
UNION
SELECT *,\'tbl2\' AS tablename FROM (
SELECT * FROM table1 WHERE user_id=' . $user_id . '
) as tbl2' . ' ORDER BY `date` DESC'
);
我已经把这个电话包起来更清晰了 - 我建议你在自己的代码中做同样的事情。我倾向于在这里使用"
标记,所以你不需要转义撇号。
ORDER BY
子句似乎也是冗余连接 - 删除点并将查询的这一部分添加到as tbl2
部分。
我将如何做到这一点:
$sql = "
SELECT *, 'tbl1' AS tablename FROM (
SELECT * FROM table1 WHERE user_id={$user_id}
) as tbl1
UNION
SELECT *, 'tbl2' AS tablename FROM (
SELECT * FROM table1 WHERE user_id={$user_id}
) as tbl2
ORDER BY `date` DESC
";
$result = mysql_query($sql);
确保$user_id
已正确转义或转换,以避免出现安全问题。此外,不再推荐使用此数据库,并将在将来的PHP版本中删除。最好转移到PDO或mysqli,并使用参数化。
最后,它确实看起来像查询本身相当麻烦 - 看起来它可以简化。或许就此问一个单独的问题?