MySQL查询选择特定数据

时间:2013-08-31 11:27:48

标签: php

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

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

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

我在哪里弄错了?

1 个答案:

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

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