php
  • mysql
  • table
  • 2013-03-09 105 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

    相关问题