我怎樣才能做到這一點:如何使用MySQL值插入第二個查詢?
SELECT Board_id FROM topic WHERE Value1='".$value2."' UNION SELECT Name FROM Boards WHERE Id=Board_id
我應該使用UNION
?或者我應該使用兩個不同的查詢?什麼是更好的?
我怎樣才能做到這一點:如何使用MySQL值插入第二個查詢?
SELECT Board_id FROM topic WHERE Value1='".$value2."' UNION SELECT Name FROM Boards WHERE Id=Board_id
我應該使用UNION
?或者我應該使用兩個不同的查詢?什麼是更好的?
使用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的庫。
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
它更快做這種方式,或者是第二查詢更好? – Jordy 2012-01-13 11:11:40
SELECT Name FROM Boards WHERE Id = (SELECT Board_id FROM topic WHERE Value1='".$value2."')
這樣做更快嗎?還是第二個查詢更好? – Jordy 2012-01-13 11:12:42
與使用兩個不同的查詢相比,一個查詢通常是一個更好的主意。 – 2012-01-13 12:53:34
我想你想:
SELECT Name
FROM Boards
WHERE Id
= (SELECT Board_id
FROM topic
WHERE Value1 = $value2
)
我會建議你使用左側的標識如下加入董事會表:
SELECT topic.Board_id, Boards.name
FROM topic
LEFT JOIN Boards
ON topic.Board_id = Boards.id
WHERE topic.Value1='".$value2."'
這樣做更快嗎?還是第二個查詢更好? – Jordy 2012-01-13 11:13:01
你想讓數據庫完成它設計的工作,所以如果你有一個關於topic.board_id和boards.id(這可能是你的主鍵)的索引,這可能是最快的方法 - 取決於數據庫的實施,其他方式可能會一樣快。 – craigmj 2012-01-13 11:15:31
另一種觀察,如果您使用PHP,您的代碼有SQL注入的風險。 – craigmj 2012-01-13 11:16:00