我正在使用以下mysql查詢從我的數據庫中返回一些數據。目前只有cities
表中包含任何內容,並且我注意到此查詢將僅返回它找到的第一個匹配條目,而不是它找到的所有匹配條目。有沒有一種方法可以修改此查詢,以便它將返回所有表中的所有匹配結果?麻煩放在一起mysql查詢
想法是,如果我去了$ query ='h'那麼查詢應該返回所有以h開頭的事件,場地和城市。
SELECT name, 'Events' as source
FROM events
WHERE name LIKE '".$query."%'
UNION ALL
SELECT name, 'Venues' as source
FROM venues
WHERE name LIKE '".$query."%'
UNION ALL
SELECT name, 'Cities' as source
FROM cities
WHERE name LIKE '".$query."%'
OR FIND_IN_SET('".$query."%', Alternate_name)
請解釋我如何解決它,而不是隻發佈一個解決方案。我仍然在學習,想要理解。
編輯:
的對取代後的查詢(用含有字母h的$查詢變量):
SELECT name, id, 'Events' as source FROM events_basic WHERE name LIKE 'h%' UNION ALL
SELECT name, fsq_id, 'Venues' as source FROM venues_cache WHERE name LIKE 'h%' UNION ALL
SELECT name, geo_id, 'Cities' as source FROM static_cities WHERE name LIKE 'h%' OR FIND_IN_SET('h%', alternate_names)
我使用的PHP代碼如下: '
$query = 'h';
$query = $this->db->query("SELECT name, 'Events' as source FROM events WHERE name LIKE ".$query."%' UNION ALL
SELECT name, 'Venues' as source FROM venues WHERE name LIKE '".$query."%' UNION ALL
SELECT name, 'Cities' as source FROM cities WHERE name LIKE '".$query."%' OR IND_IN_SET('".$query."%', Alternate_name)");
if($query->num_rows > 0)
{
$results = $query->row_array();
print_r($results);
}`
這個想法是變量$查詢包含一個事件,城市或地點的名稱或部分名稱。該查詢應該返回匹配給定名稱的事件,場地和城市的名稱。我希望我已經澄清,如果沒有,我會盡力澄清更多。
你的SQL似乎是正確的。你不解釋FIND_IN_SET條件,但由於它是ORed我猜測它沒有造成任何麻煩。你能否通過給出一些數據樣本來進一步解釋,以說明問題到底是什麼? – wisefish
可以請你發佈你的php代碼執行這個sql查詢和獲取語句嗎? – Astha
我已經用php代碼編輯了我的問題。 – Derek