Поиск по нескольким таблицам

Siriuss2007

Новичок
Подскажите пожалуйста готовое решение, как можно осуществить поиск по нескольким таблицам одной БД с последующим выводом результатов.
Заранее благодарен.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
1. select
2. select
3. select
n. select

или select(...) UNION select(...)
 

Siriuss2007

Новичок
c0dex Если я правильно понял необходимо написать запрос под каждую таблицу, 5 таблиц => 5 запросов?
Я все же хотел бы посмотреть на образец готового алгоритма.
 

Вурдалак

Продвинутый новичок
Да, требуется столько запросов, сколько таблиц.

Если это не устраивает, то стоит задуматься почему требуется искать среди разнородных объектов (ты ищешь среди стульев и ложек), либо почему эти объекты оказались разнородными (может быть стоило добавить доп. колонку вместо отдельной таблицы).
 

Vin-Diesel

Новичок
c0dex Если я правильно понял необходимо написать запрос под каждую таблицу, 5 таблиц => 5 запросов?
Я все же хотел бы посмотреть на образец готового алгоритма.
Создай 5 таблиц с полем num, заполни их произвольными цифрами.

Данный запрос ищет число 10 в 5ти таблицах:

SELECT 't1' AS 'table', num FROM t1 WHERE num = 10 UNION
SELECT 't2' AS 'table', num FROM t2 WHERE num = 10 UNION
SELECT 't3' AS 'table', num FROM t3 WHERE num = 10 UNION
SELECT 't4' AS 'table', num FROM t4 WHERE num = 10 UNION
SELECT 't5' AS 'table', num FROM t5 WHERE num = 10
 

Siriuss2007

Новичок
Приведенный пример - это для ACCESS.
Меня больше интересует MySQL + PHP. Поскольку нужно не только выбрать поисковое слово из таблиц, а и сформировать ссылку для просмотра страницы в котором присутствует ключевое слово. БД состоит из разных таблиц по темам, такая структура БД. Поисковое слово может быть в разных таблицах.
Ниже привожу свой пример:
PHP:
<?php 
/* 1 - Поиск по таблице Infra_structura*/
		$result = mysql_query ("SELECT  id, title FROM Infra_structura WHERE MATCH (text) AGAINST ('$find')",$db);
		if (mysql_num_rows ($result) > 0)
		{
			$myrow = mysql_fetch_array ($result);
			/* Цикл вывода */
			do
			{
				printf ("<p class='view_name_cat'><a href='View_post.php?id=%s'>%s</a></p>", $myrow["id"], $myrow["title"]); 
			}
			while ($myrow = mysql_fetch_array ($result));
			
		}
?>
И таких запросов на каждую таблицу.
У меня вопрос, здесь осуществляется поиск по одному полю - text, а можно одновременно искать в этой же таблице и по другому полю?

С уважением Владимир
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Можно, оператор AND | OR тебе в помощь
 

Siriuss2007

Новичок
Да спасибо!
Скорее всего решение по поиску одновременно по нескольким полям в одной таблице будет таким:
PHP:
$result = mysql_query ("SELECT  id, title FROM Infra_structura WHERE MATCH (text, adress, title) AGAINST ('$find')",$db);
где text, adress, title -это поля по которым выполняется поиск.
 

Siriuss2007

Новичок
Подскажите пожалуйста в таком вопросе.
Вот фрагменты кода файла который осуществляет поиск по полю в разных таблицах БД

PHP:
<?php 
	include ("block/bd.php"); /* Подключаю базу */
	if (isset($_POST['submit_find'])) { $submit_find = $_POST['submit_find']; }
	if (isset($_POST['find'])) { $find = $_POST['find']; }
	if (isset ($submit_find))
	{
		if (empty ($find) or strlen($find) < 4) 
		{
		exit ("<p>Поисковый запрос не введен или он менее 4-х символов.</p>");
		}
		$find = trim ($find); /* Убираем лишние пробелы */
		$find = stripslashes ($find); /* Безопасность от слеша в поиске */
		$find = htmlspecialchars ($find); /* Безопасность от html кода в поиске */
	}
	else
	{
		exit("<p>Вы хотите осуществить поиск БЕЗ необходимых параметров</p>");
	}
?>
Код HTML пропускаю, далее:
PHP:
echo ("Поисковое слово - $find");
/* 1 - Поиск по таблице Infra_structura */
		$result = mysql_query ("SELECT  id, title FROM Infra_structura WHERE MATCH (text) AGAINST ('$find')",$db);
		if (mysql_num_rows ($result) > 0)
		{
			$myrow = mysql_fetch_array ($result);
			/* Цикл вывода */
			do
			{
				printf ("<p class='view_name_cat'><a href='View_post.php?id=%s'>%s</a></p>", $myrow["id"], $myrow["title"]); 
			}
			while ($myrow = mysql_fetch_array ($result));
			
		}
		else 
		{
			/* Если результат =0 */
			$null_rezult = 1;
		}
		
/* 2 - Поиск по таблице History */
		$result = mysql_query ("SELECT  id, title FROM History WHERE MATCH (text) AGAINST ('$find')",$db);
		if (mysql_num_rows ($result) > 0)
		{
			$myrow = mysql_fetch_array ($result);
			/* Цикл вывода */
			do
			{
				printf ("<p class='view_name_cat'><a href='View_history.php?id=%s'>%s</a></p>", $myrow["id"], $myrow["title"]); 
			}
			while ($myrow = mysql_fetch_array ($result));
			
		}
	    else
		{
			/* Если результат =0 */
			$null_rezult = $null_rezult + 1;
		}
И так проверяю 7 таблиц

PHP:
/* Если ничего нет */	
		if ($null_rezult==7)
		{
		printf ("<div align='center'><img src='img/null_result.gif' alt='информации нет' /></div>");
		echo "<p><strong>Извените информацию которую Вы ищите на сайте отсутствует</strong>.</p>
		<p><strong>Попробуйте переформулировать поисковое слово</strong>.</p><br><br>";
		}
		else
		{
		exit ();
		}
		?>
Проблема в том, что код работает на локальном сервере, а когда заливаю в инет - нет.
Интересно даже то, что поисковое слово не передается или оно затирается где-то.
Подскажите где "зарыта собака".

Заранее благодарен, Владимир!
 
Сверху