2013-03-09 3 views
0

У меня есть скрипт поиска, который должен искать несколько таблиц для фразы/слова с использованием MySQL и PHP. Столбец name, который выполняется поиск, является одинаковым для таблиц. Любая помощь будет оценена, и вот мой код ниже.MySQL PHP Query Выбор из нескольких таблиц

<?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

+0

любой шанс, что вы можете поместить все свои данные в ** одну ** таблицу? –

+0

Ваш первый запрос недействителен, нет имени таблицы 'SELECT * FROM WHERE REGEXP ...'. Существует ли какое-либо отношение между этими таблицами во втором запросе? –

ответ

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

+0

Я добавил скобки вокруг секции union, чтобы убедиться, что он сначала соединяется, а затем выбирает вне скобки. Вероятно, вам придется добавить псевдоним таблицы в раздел объединения, поместив букву или имя после закрытия круглой скобки. Это помогает узнать, ЧТО ошибка. Использовать: if (! $ Result = mysql_query ($ query)) echo "$ query \ n" .mysql_error(). "\ N"; – kainaw

+0

Спасибо, я посмотрю на него и вернусь к вам. – jack2230

Смежные вопросы