как сделать поиск по бд из разных таблиц с одинаковыми полями

Статус
В этой теме нельзя размещать новые ответы.

Crimso13

Создатель
Регистрация
10 Авг 2008
Сообщения
10
Реакции
2
вообщем есть 2 таблицы с повторяющимися полями как сделать по ним поиск я написал примерно так
$result = mysql_query("SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMAT(date,'%d.%m.%Y') AS date1 FROM data WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')ORDER BY date DESC",$db);
$result2= mysql_query("SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMAT(date,'%d.%m.%Y') AS date1 FROM prog WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')ORDER BY date DESC",$db);
if (!$result or !$result2)
{
echo ("запрос в базу не прошел");
exit(mysql_error());
}
if (mysql_num_rows($result ) <0 or mysql_num_rows($result2) <0 )

{echo "в таблице нет данных" ;
exit();
}
if (mysql_num_rows($result) >0 or mysql_num_rows($result2) >0 )
{
$myrow = mysql_fetch_array($result);
$myrow2 = mysql_fetch_array($result2);

if (isset ($result)) {
do {
printf("<table align='center' class='post'>
<tr>
<td class='post_tittle'><p class='post_name'><img class='mini' alighn='left' src='%s'><a href='view_post.php?id=%s' >%s </a></p>


<p class='post_adds'>дата добавления: %s</p>

<p class='post_adds' >автор урока: %s</p></td>
</tr>
<tr>
<td>%s<p class='post_view'>просмотров: %s</p></td>
</tr> </table><br><br>",$myrow["mini_img"],$myrow["id"],$myrow["tittle"],$myrow["date1"],$myrow["author"],$myrow["des"],$myrow["view"] );
}
while ($myrow=mysql_fetch_array($result));
}
if (isset ($result2)) {
do {
printf("<table align='center' class='post'>
<tr>
<td class='post_tittle'><p class='post_name'><img class='mini' alighn='left' src='%s'><a href='view_prog.php?id=%s' >%s </a></p>


<p class='post_adds'>дата добавления: %s</p>

<p class='post_adds' >автор урока: %s</p></td>
</tr>
<tr>
<td>%s<p class='post_view'>просмотров: %s</p></td>
</tr> </table><br><br>",$myrow2["mini_img"],$myrow2["id"],$myrow2["tittle"],$myrow2["date1"],$myrow2["author"],$myrow2["des"],$myrow2["view"]);
}


while ($myrow2=mysql_fetch_array($result2));
}

}

?>


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

if (mysql_num_rows($result ) <0 or mysql_num_rows($result2) <0 )
{echo "в таблице нет данных" ;
exit();
}

- будет истимым если первое ИЛИ второе условие <0, а нужно наверное использовать И (and)

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

PHP:
$result = mysql_query("(SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMA T(date,'%d.%m.%Y') AS date1 FROM data WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')) UNION (SELECT id,tittle,des,date,author,mini_img,view,DATE_FORMA T(date,'%d.%m.%Y') AS date1 FROM prog WHERE (text LIKE '%$search%' ) OR (des LIKE '%$search%')) ORDER BY date DESC",$db);

Синтаксис оператора UNION
Для просмотра ссылки Войди или Зарегистрируйся
 
С этим все понятно а если поля разные и количество полей разное то как сделать запрос
 
Объединение таблиц или JOIN.
 
что то не получается пишу вот так
$result = mysql_query("SELECT data.id,data.tittle,data.des,data.date,data.author,data.mini_img,data.view,DATE_FORMAT(data.date,'%d.%m.%Y') AS date1,prog.id,prog.tittle,prog.des,prog.view,prog.date,prog.mini_img,prog.url,prog.author,DATE_FORMAT(prog.date,'%d.%m.%Y') AS date1 FROM data JOIN prog WHERE (data.text LIKE '%$search%' ) OR (data.des LIKE '%$search%') OR (prog.text LIKE '%$search%' ) OR (prog.des LIKE '%$search%') ORDER BY data.date OR prog.date DESC",$db);
выводит только из второй таблицы и по несколько раз
как правильно написать запрос
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху