php
  • mysql
  • table
  • 2013-03-09 103 views 0 likes 
    0

    我在這裏有一個搜索腳本,需要使用MySQL和PHP搜索多個表中的短語/單詞。正在搜索的列name在所有表中都是相同的。任何幫助將不勝感激,這是我的代碼如下。MySQL PHP查詢從多個表中選擇

    <?php 
        $filter = $_REQUEST['query']; 
        mysql_connect($hostname,$username, $password) or die ("<script language='JavaScript'>alert('Unable to connect to database! Please try again later.'),history.go(-1)</script>"); 
        mysql_select_db($dbname); 
        $query = 'SELECT * FROM (SELECT `name` FROM `voxmoviesfilestable`) a UNION (SELECT `name` FROM `voxadultfilestable`) b UNION (SELECT `name` FROM `voxmixesfilestable`) c UNION (SELECT `name` FROM `voxconcertsfilestable`) d UNION (SELECT `name` FROM `voxmp3filestable`) e UNION (SELECT `name` FROM `voxfilestable`) WHERE `name` REGEXP \''.$filter.'\' ORDER BY `name`;'; 
        $maxquery = 'SELECT count(*) as cnt FROM `voxmoviesfilestable`, `voxadultfilestable`, `voxmixesfilestable`, `voxconcertsfilestable`, `voxmp3filestable`, `voxfilestable` WHERE `name` REGEXP \''.$filter.'\';'; 
    
        $result = mysql_query($query) or die ('Error accessing Database'); 
    ?> 
    
    +0

    不是一個解決方案,但是''query ='中有很多語法錯誤SELECT * FROM WHERE REGEXP \''。$ filter。'\'ORDER BY name;';' – asprin 2013-03-09 06:29:45

    +0

    任何機會你都可以把你所有的數據輸入**一個**表? – 2013-03-09 06:30:12

    +0

    您的第一個查詢無效,沒有表名稱「SELECT * FROM WHERE REGEXP ...'。第二個查詢中的這些表之間是否有任何關係? – 2013-03-09 06:34:09

    回答

    0

    命令「select ... from table1,table2,table3 ...」不會做它看起來你認爲它的功能。它將每個表的每一行的每一行大量連接到每個其他表的每一行。這非常糟糕。看起來你想要結合。但是,這不是那麼容易,因爲你必須讓列看起來一樣。它看起來像:

    select * from ((select id, name from table1) a union (select id, name from table2) b union ...) where regexp '$filter' order by name 
    

    注:我最初寫這個後大約12小時左右在聯盟部分周圍添加括號。

    工會需要時間,但我相信這會比在PHP中單獨查詢每個錶快。

    +0

    我更新了我的代碼,但仍然收到數據庫錯誤。 – jack2230 2013-03-09 07:09:07

    +0

    我在union部分的周圍添加了圓括號,以確保它首先進行聯合,然後在括號外進行選擇。您可能必須通過在右括號之後放置一些字母或名稱來向聯合部分添加表別名。它有助於瞭解錯誤是什麼。使用:if(!$ result = mysql_query($ query))echo「$ query \ n」.mysql_error()。「\ n」; – kainaw 2013-03-09 15:48:52

    +0

    謝謝,我會看看它並回復你。 – jack2230 2013-03-11 05:35:19

    相關問題