0

我在这里有一个搜索脚本,需要使用 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');
?>
4

1 回答 1

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 中单独查询每个表要快。

于 2013-03-09T06:41:02.863 回答