2013-08-31 18 views
0

我想顯示當他們登錄到該網站屬於我的任何用戶的數據,以及每個表的名稱(他們完成了對他們的報價)。MySQL查詢來選擇特定的數據

這是我使用的代碼,但是當我添加它,它不工作。

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

哪裏我犯了一個錯誤?

+2

歡迎堆棧溢出!在你編寫任何**更多的SQL接口代碼之前,請務必閱讀[正確的SQL轉義](http://bobby-tables.com/php),以避免嚴重的[SQL注入漏洞](http:/ /bobby-tables.com)。另外,不應該在新的應用程序中使用['mysql_ *'functions](http://php.net/manual/en/ref.mysql.php),並且將從未來版本的PHP中刪除。請考慮切換到[**'MySQLi' **或**'PDO' **](http://php.net/manual/en/mysqlinfo.api.choosing.php)。正如所寫,有人可能會在幾秒鐘內毀掉整個網站。 –

+0

第一個錯誤是在標題中。使用「想要」這個詞使情況更加複雜。從那裏,它是下坡。 – Strawberry

+5

讓我們從頭開始。你會得到什麼錯誤?如果你沒有錯誤,會發生什麼?在'mysql_error()'中是否有任何mysql錯誤?你確定這個查詢選擇你實際想要選擇的數據嗎? – Sumurai8

回答

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並使用參數化會更好。

最後,它確實比較像查詢本身是相當麻煩的 - 它看起來像它可以簡化。也許問一個單獨的問題呢?