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 に答える