Вывод данных MySQL из 2-х и более таблиц.

Гриша К.

Новичок
Вывод данных MySQL из 2-х и более таблиц.

Здравствуйте. Подскажите пожалуйста решение по такому вопросу:
У меня есть поискова форма, когда в неё водят текст для поиска, этот текст передается в переменную $searchterm,
далее идет вывод данных из БД, на примере одной таблицы у меня все получается (т.е. я делаю вывод из одной таблицы spine)
PHP:
mysql_select_db('pozvono9_link');
  $query = "select * from spine where title like '%".$searchterm."%'";
  $result = mysql_query($query);
Но мне надо сделать вывод вообще из трех таблиц, ну я решил попробовать сделать из 2-х и это не получилось, при описанном варианте ниже, получается, что вывод идет, но каждый результат повторяется больше двацтаи раз, получается так, что записей в таблицах у меня 30 а выводится 300 результатов.
Подскажите пожалуйста как сделать правильно объединение 2-ч таблиц, для вывода данных из БД по описанному выше алгоритму.

PHP:
mysql_select_db('pozvono9_link');
  $query = "select * from spine, medicine where spine.title like '%".$searchterm."%' and medicine.title like '%".$searchterm."%'";
  $result = mysql_query($query);

  $num_results = mysql_num_rows($result);

  echo '<p>Number: '.$num_results.'</p>';

  for ($i=0; $i <$num_results; $i++)
  {
     $row = mysql_fetch_array($result);
     echo '<p><strong>'.($i+1).'. Title: ';
     echo htmlspecialchars(stripslashes($row['title']));
     echo '</strong><br />Description: ';
     echo stripslashes($row['description']);
     echo '<br />URL: ';
     echo stripslashes($row['url']);
     echo '</p>';
  }
 

Гриша К.

Новичок
Tor, Спасибо за ответ. Щас в книге поище, я вообще не понимаю, что это такое union, куда его всталять.
 

Гриша К.

Новичок
Я увидел похожие примеры, поробовал, ничего не получается.
Подскажите пожалуйста как это сделать, у таблиц абсолютно одинаковая сируктура. Ну я просто уверен, что это просто, для тех кто знает, пожалуйста подскажите.

PHP:
$query = "(select * from spine where title like '%".$searchterm."%') union (select * from medicine where title like '%".$searchterm."%')";
-~{}~ 02.11.05 15:24:

Tor. Я проблема с тем, что я немогу вывести данные из двух таблиц одинаковой структуры. Из одной все выводится хорошо, а из двух непойми как.
 

Гриша К.

Новичок
SiMM, телепаты здесь ненужны, я же в начале темы написал:

-----
Но мне надо сделать вывод вообще из трех таблиц, ну я решил попробовать сделать из 2-х и это не получилось, при описанном варианте ниже, получается, что вывод идет, но каждый результат повторяется больше двацтаи раз, получается так, что записей в таблицах у меня 30 а выводится 300 результатов
---

Так что, SiMM, ты на меня погнал, а на самом деле ты видешь, что я все написал, это ты затупил.
SiMM, спасибо за ответ, но зачем мне эта ссылка. Я просто незнаю как правильно организовать вывод из двух таблиц, и прошу мне помочь.

-~{}~ 02.11.05 15:29:

n0b0dy, спасибо за ссылку, щас погляжу.
 

SiMM

Новичок
Хрена се ламеры пошли.
Я ещё раз повторяю свой вопрос - на кой было разносить однотипные данные по 2м и более таблицам?
 

Гриша К.

Новичок
http://dev.mysql.com/doc/refman/5.0/en/union.html
Ну вот например на примере ссылки, есть такой вариант:

SELECT a FROM tbl_name WHERE a=10 AND B=1)
UNION
(SELECT a FROM tbl_name WHERE a=11 AND B=2)
ORDER BY a LIMIT 10;

А у меня вывод такой

$query = "(select * from spine where title like '%".$searchterm."%') union (select * from medicine where title like '%".$searchterm."%')";

Ну и почему мой варинт неработает, непонимаю.
Выводится такая вот ошибка:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\home\example\www\results.php on line 36
 

Гриша К.

Новичок
SiMM, мне так удобней делать вывод для каталога сайтов.
Есть раздел каталога spine, соответствует таблице spine, которая также содержит идентификаторы подкатегорий,
потом идет таблица medicine, соответствует таблице medicine, и т.д.
А у меня вопрос такой, как сдлеать вывод из двух таблиц, на примере вывода из одной таблицы:
PHP:
mysql_select_db('pozvono9_link'); 
  $query = "select * from spine where title like '%".$searchterm."%'"; 
  $result = mysql_query($query);
 

SiMM

Новичок
> SiMM, мне так удобней делать вывод для каталога сайтов.
Это заблуждение. Сделай одну таблицу и заведи в ней поле section_id, где будет id секции в таблице sections. Все твои проблемы моментально решатся.
 

Гриша К.

Новичок
n0b0dy, где там ответ на мой вопрос как сделать вывод из 2 таблиц?
Воспользовался я mysql_error(), и при таком запросе
$query = "(select * from spine where title like '%".$searchterm."%') union (select * from medicine where title like '%".$searchterm."%')";
такое вод сообщение выводится:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\home\example\www\results.php on line 36
1064: лБЛБС-ФП УЙОФБЛУЙЮЕУЛБС ПЫЙВЛБ ПЛПМП '(select * from spine where title like '%сайт 12%') union (select', Ч УФТПЛЕ 1 .

-~{}~ 02.11.05 15:52:

n0b0dy, где там ответ на мой вопрос как сделать вывод из 2 таблиц?
Воспользовался я mysql_error(), и при таком запросе
$query = "(select * from spine where title like '%".$searchterm."%') union (select * from medicine where title like '%".$searchterm."%')";
такое вод сообщение выводится:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\home\example\www\results.php on line 36
1064: лБЛБС-ФП УЙОФБЛУЙЮЕУЛБС ПЫЙВЛБ ПЛПМП '(select * from spine where title like '%сайт 12%') union (select', Ч УФТПЛЕ 1 .



SiMM, ну вот спасибо, за такой спокойный и понятный ответ. Я так попробую сделать, наверное действительно так проще.
 

SiMM

Новичок
> Воспользовался я mysql_error()
> 1064: лБЛБС-ФП УЙОФБЛУЙЮЕУЛБС ПЫЙВЛБ ПЛПМП '(select * from spine where title like '%сайт 12%') union (select', Ч УФТПЛЕ 1 .
Ну вот про это тебе и говорили. То, что ты пользуешься невесь чем, благодаря чему сообщения об ошибке на русском языке и трудночитаемы - это уже твои проблемы ;) Но в сообщении об ошибке чётко сказано:
1064: Какая-то синтаксическая ошибка около '(select * from spine where title like '%сайт 12%') union (select', в строке 1 .
 
Сверху