0

我想在我的任何用户登录网站时显示属于他们的数据,以及每个表的名称(他们完成了对他们的报价)。

这是我使用的代码,但是当我添加它时它不起作用。

$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'];
}

我在哪里做错了?

4

1 回答 1

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,并使用参数化。

最后,它确实看起来查询本身相当麻烦 - 看起来它可以被简化。也许问一个单独的问题?

于 2013-08-31T11:39:29.503 回答