2012-01-13 66 views
0

我怎樣才能做到這一點:如何使用MySQL值插入第二個查詢?

SELECT Board_id FROM topic WHERE Value1='".$value2."' UNION SELECT Name FROM Boards WHERE Id=Board_id 

我應該使用UNION?或者我應該使用兩個不同的查詢?什麼是更好的?

回答

0

使用JOIN:

select name, board_id from boards b inner join topic t on t.board_id=b.id 
where t.value1='VALUE1' 

參見SQL聯接教程W3學院:http://www.w3schools.com/sql/sql_join.asp

注意,如果你使用PHP,你的代碼是在SQL注入的風險:http://en.wikipedia.org/wiki/SQL_injection

有很多方法Ø避免這種情況:

$sql = "SELECT board_id, name from boards b inner join topic t on " . 
    " t.board_id=b.id " . 
    " where t.value1='" . mysql_real_escape_string($value2) . "'"; 

更重要的是可能是使用參數化查詢,但是這取決於您是否使用PHP的MySQL或MySQLi的庫。

+0

這樣做更快嗎?還是第二個查詢更好? – Jordy 2012-01-13 11:13:01

+0

你想讓數據庫完成它設計的工作,所以如果你有一個關於topic.board_id和boards.id(這可能是你的主鍵)的索引,這可能是最快的方法 - 取決於數據庫的實施,其他方式可能會一樣快。 – craigmj 2012-01-13 11:15:31

+0

另一種觀察,如果您使用PHP,您的代碼有SQL注入的風險。 – craigmj 2012-01-13 11:16:00

0
 

SELECT t.Board_id, B.Name FROM topic t 
left join Boards B ON (B.id = t.Board_id) 
where t.SELECT Board_id FROM topic = $value1 
 
+0

它更快做這種方式,或者是第二查詢更好? – Jordy 2012-01-13 11:11:40

0

SELECT Name FROM Boards WHERE Id = (SELECT Board_id FROM topic WHERE Value1='".$value2."')

+0

這樣做更快嗎?還是第二個查詢更好? – Jordy 2012-01-13 11:12:42

+0

與使用兩個不同的查詢相比,一個查詢通常是一個更好的主意。 – 2012-01-13 12:53:34

0

我想你想:

SELECT Name 
FROM Boards 
WHERE Id 
    = (SELECT Board_id 
     FROM topic 
     WHERE Value1 = $value2 
    ) 
0

我會建議你使用左側的標識如下加入董事會表:

SELECT topic.Board_id, Boards.name 
FROM topic 
LEFT JOIN Boards 
ON topic.Board_id = Boards.id 
WHERE topic.Value1='".$value2."' 
相關問題