MySQL PHP查询从多个表中选择

时间:2013-03-09 06:28:14

标签: php mysql

我这里有一个搜索脚本,需要使用MySQL和PHP在多个表中搜索短语/单词。正在搜索的列name列在各个表中都是相同的。任何帮助将不胜感激,这是我的代码如下:

<?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');
?>

1 个答案:

答案 0 :(得分: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中单独查询每个表更快。