[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поисковый запрос к БД с UNION
Onehp
Нужно, что бы поиск был по 2-м и более таблицам БД, таблицы не связаны. Делал множество разных вариантов, но все четно, помогите пожалуйста smile.gif

Пример 1:
$result = mysql_query ("SELECT * FROM news WHERE news.text='$search' UNION SELECT * FROM video WHERE video.text='$search'",$db);


Пример 2:
$result = mysql_query("SELECT * FROM news WHERE MATCH(text) AGAINST('$search') UNION SELECT * FROM video WHERE MATCH(text) AGAINST('$search')",$db);


Пример 3:
$result = mysql_query("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION ALL (SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search'))",$db);WHERE MATCH(text) AGAINST('$search')


Пример 4:
$result = mysql_query("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION ALL SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search')",$db);


Пример 5:
$result = mysql_query("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search')",$db);


Пример 6:
<?php $result = mysql_query ("SELECT * FROM `news` WHERE MATCH(`text`) AGAINST('$search') UNION SELECT * FROM `video` WHERE MATCH(`text`) AGAINST('$search')");


Простите за кучу моего мусора, но помощь нереально как нужна, перерыл кучу форумов статьей и всего всего, ничего не нашел, а что нашел пытался сделать под своё все равно ничего не помогает, помогите пожалуйста sad.gif(((

Код ошибки:
You have an error in your SQL syntax near 'UNION SELECT * FROM video WHERE video.text='werw'' at line 1

Вот полный код при 1 примере



Спустя 20 минут, 40 секунд (21.07.2010 - 13:07) sergeiss написал(а):
У тебя в строке поиска текста нету, случайно, кавычек? Или другого безобразия?

Покажи лучше нам не в таком виде запрос, как ты сделал, а так (то, что выведет ЭХО, то и покажи):
$sql="тут твой запрос";
echo $sql;

Спустя 5 минут, 10 секунд (21.07.2010 - 13:13) Onehp написал(а):
<?php $result = mysql_query ("SELECT * FROM news, video WHERE text LIKE $search");




//("SELECT text FROM news WHERE text LIKE '$search'
//UNION
//SELECT text FROM coments WHERE text LIKE '$search'");




//("SELECT * FROM `news` WHERE MATCH(`text`) AGAINST('$search')");

//("SELECT * FROM news WHERE MATCH(text) AGAINST('$search')") UNION ("SELECT * FROM video WHERE MATCH(text) AGAINST('$search')");

//("SELECT * FROM news WHERE news.text='$search' UNION SELECT * FROM video WHERE video.text='$search'",$db);

/*("SELECT *
FROM news
WHERE MATCH(text) AGAINST('$search')
UNION
SELECT *
FROM video
WHERE MATCH(text) AGAINST('$search')
");*/

//("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION ALL (SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search'))",$db);WHERE MATCH(text) AGAINST('$search')



//("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION ALL SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search')",$db);

//("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search') UNION SELECT id,title,description,date,author,mini_img,view,comments FROM video WHERE MATCH(text) AGAINST('$search')",$db);




if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору adminmail@mail.ru <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

if (mysql_num_rows($result) > 0)

{
$myrow = mysql_fetch_array ($result);
do
{
printf ("<table align='center' class='view_text_title'>

<tr>
<td class='view_text_title1'>
<p class='view_name'><a href='view_news.php?id=%s' class='view_name'><img class='mini' align='left' src='%s'>%s</a></p>
<p class='view_adds'>Автор: %s %s · Комментариев: %s · Просмотров: %s</p></td>
</tr>

<tr>
<td>%s</td>
</tr>

</table><br>"
,$myrow['id'],$myrow['mini_img'],$myrow['title'],$myrow['author'],$myrow['date'],$myrow['comments'],$myrow['view'],$myrow['description']);
}
while ($myrow = mysql_fetch_array ($result));
}
else
{
echo "<p>Ничего не нашлось</p>";
exit();
}
?>


sergeiss
Извини, я вас немного не понял) выложил кусочек моего кода..

Спустя 24 минуты, 19 секунд (21.07.2010 - 13:37) sergeiss написал(а):
Перед вот этим кодом

$result = mysql_query ("SELECT * FROM news WHERE news.text='$search' UNION SELECT * FROM video WHERE video.text='$search'",$db);

размести вот такой код

$sql = "SELECT * FROM news WHERE news.text='$search' UNION SELECT * FROM video WHERE video.text='$search'";
echo $sql;

и покажи, что выдаст браузер

PS. А использование цикла do-while при выборке данных говорит о том, что тебе надо забыть всё, что ты знал, и идти вот сюда http://phpforum.ru/index.php?showtopic=21916, причем срочно!!!

Спустя 4 минуты, 44 секунды (21.07.2010 - 13:42) Onehp написал(а):
SELECT * FROM news WHERE news.text='Eminem' UNION SELECT * FROM video WHERE video.text='Eminem'

Запрос на выборку данных из базы не прошел. Напишите об этом администратору adminmail@mail.ru
Код ошибки:

You have an error in your SQL syntax near 'UNION SELECT * FROM video WHERE video.text='Eminem'' at line 1


Вот что показывает браузер

Спустя 11 минут, 16 секунд (21.07.2010 - 13:53) sergeiss написал(а):
А без юниона запросы проходят? Типа такого
SELECT * FROM news WHERE news.text='Eminem'

или такого?
SELECT * FROM video WHERE video.text='Eminem'

Спустя 21 минута, 47 секунд (21.07.2010 - 14:15) Onehp написал(а):
sergeiss, Так я не делал, делал так:
("SELECT id,title,description,date,author,mini_img,view,comments FROM news WHERE MATCH(text) AGAINST('$search')");


Сейчас попробую как вы пишите

Спустя 2 минуты, 2 секунды (21.07.2010 - 14:17) Onehp написал(а):
Только вместо Eminem, стоит $search

Спустя 2 минуты, 42 секунды (21.07.2010 - 14:19) Onehp написал(а):
$result = mysql_query ("SELECT * FROM news WHERE news.text='$search'");


Ничего найти не может выводит сообщение что ничего не нашлось..

Спустя 4 минуты, 13 секунд (21.07.2010 - 14:24) sergeiss написал(а):
Получается, что у тебя одиночный запрос проходит, а с юнионом не проходит?

Спустя 2 минуты, 18 секунд (21.07.2010 - 14:26) Onehp написал(а):
sergeiss, Ога sad.gif

Спустя 6 минут, 27 секунд (21.07.2010 - 14:32) sergeiss написал(а):
Версия БД какая, под какой операционкой находится?

Спустя 2 минуты, 17 секунд (21.07.2010 - 14:35) Onehp написал(а):
2.6.1 Windows

Еще есть новая версия 3.?.? тоже Windows

Спустя 2 минуты, 48 секунд (21.07.2010 - 14:37) sergeiss написал(а):
Не понял... 2.6.1 - это версия MySQL???

Спустя 6 минут, 34 секунды (21.07.2010 - 14:44) Onehp написал(а):
Добро пожаловать в phpMyAdmin 2.5.6
MySQL 3.23.53-max на localhost как root@localhost

Больше ничего не нашел..

Спустя 3 минуты, 18 секунд (21.07.2010 - 14:47) sergeiss написал(а):
http://ru.wikipedia.org/wiki/MySQL - версия 3.23 вышла в начале 2001 года. С тех пор уже появилось много версий... Последняя из которых 5-я с какой-то цифрой.

Возьми нормальную, современную версию БД и работай с ней!!!!!!!!!!!!!!!

Спустя 1 минута, 10 секунд (21.07.2010 - 14:48) linker написал(а):
Пробуй так
$result = mysql_query ("SELECT * FROM news WHERE news.text like '%$search%'");
Либо читай мануал mysql про fulltext search

Спустя 6 минут, 29 секунд (21.07.2010 - 14:55) Onehp написал(а):
Спасибо wink.gif

Спустя 11 минут, 12 секунд (21.07.2010 - 15:06) sergeiss написал(а):
linker - не отрицая правильности твоего поста замечу, что у ТС древнейшая версия БД. И я не удивлюсь, если там просто не работает ЮНИОН smile.gif

Спустя 8 минут, 18 секунд (21.07.2010 - 15:14) linker написал(а):
sergeiss, да вполне возможно, видимо не углядел поста, где указывалась версия MySQL

Спустя 18 минут, 44 секунды (21.07.2010 - 15:33) sergeiss написал(а):
linker - развивай наблюдательность wink.gif Обсуждение насчет версии БД было как раз перед твоим первым ответом в этой теме и даже в нескольких сообщениях.

Спустя 3 часа, 17 минут, 46 секунд (21.07.2010 - 18:51) Onehp написал(а):
sergeiss, Вы же перенаправили меня на эту статью, стараюсь переделать все под неё, но ничего не выходит, точнее выходит но..
<? include ("bloki/bd.php");

$result = mysql_query ("SELECT title,meta_d,meta_k,text FROM settings WHERE page='index'");

if (!$result)
{
echo "<p>Запросна выборку данных из базы не прошел. Напишите об этом администратору onahapapokemon@mail.ru. <br> <strong>Код ошибки:</strong></p>";
exit (mysql_error());
}

if (mysql_num_rows ($result) > 0)
{
$myrow = mysql_fetch_array ($result);
}

else
{
echo "<p>Информация по запросу не может быть извлечена в таблице нет записей</p>";
exit ();
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<
html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<
title><? echo $myrow['title']; ?></title>
<
link href="style.css" rel="stylesheet" type="text/css">
<
meta name="description" content="<? echo $myrow['meta_d']; ?>">
<
meta name="keywords" content="<? echo $myrow['meta_k']; ?>">
</
head>

<
body>
<
table width="780" border="0" align="center" cellpadding="0" cellspacing="0" class="main_border">
<? include ("bloki/header.php"); ?>
<tr>
<
td><table width="900" border="0" cellspacing="0" cellpadding="0">
<
tr>
<? include ("bloki/left.php"); ?>
<td valign="top">
<? include ("bloki/search_user.php"); ?>
<p class="view_last">Последние новости:</p>
<?
$sql = ("SELECT id,title,description,author,date,mini_img,comments,view FROM `news` ORDER BY date DESC, id DESC LIMIT 5");
$result3 = mysql_query($sql) or die(mysql_error() ."<br/>". $sql);

if (!$result3)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору adminmail@mail.ru <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}

$table = "<table border=1 width=90% align=center>\n";

while ($row = mysql_fetch_assoc($result3));
{
$table .= "<tr>\n";

$table .= "<td>".$row['id']."</td>\n";
$table .= "<td>".$row['title']."</td>\n";
$table .= "<td>".$row['description']."</td>\n";
$table .= "<td>".$row['author']."</td>\n";
$table .= "<td>".$row['date']."</td>\n";
$table .= "<td>".$row['mini_img']."</td>\n";
$table .= "<td>".$row['comments']."</td>\n";
$table .= "<td>".$row['view']."</td>\n";

$table .= "</tr>\n";
}
$table .= "</table>\n";

echo $table;
?>

<p align="right"><a class="view_all" href="news.php">Все новости</a></p>

</
td>
</
tr>
</
table></td>
</
tr>
<? include ("bloki/footer.php"); ?>
</table>

</
body>
</
html>


Получается такого рода картина:

user posted image
Не выводится данные из БД И вместо русских букв каракули, как показано на рисунке, что делать подскажите пожалуйста smile.gif

Спустя 10 минут, 23 секунды (21.07.2010 - 19:01) Basili4 написал(а):
У тебя кодировка базы скорее всего utf-8 а на стрницу ты пытаешся вывести windows-1251

Спустя 1 час, 59 минут, 38 секунд (21.07.2010 - 21:01) sergeiss написал(а):
Твои красные знаки вопроса говорят о том, что там пустая таблица? Ничего удивительного smile.gif Потому что обрати внимание на эту строку, на "типа начало цикла" wink.gif

while ($row = mysql_fetch_assoc($result3));

Вроде бы всё верно... Но я тебя уверяю, что в "статье по ссылке" в конце аналогичной строки НЕТУ ТОЧКИ С ЗАПЯТОЙ! Поставив там точку с запятой, ты закрыл цикл. Точнее, он состоит из пустого места....

Плюс к этому, в строках, где ты формируешь таблицу, не нужно писать \n!!! Это тут не требуется.

И еще перед началом цикла не повредит сделать контрольный вывод количества выбранных строк, хотя бы на время разработки скрипта.
echo mysql_num_rows( $result3 ).'<br>';

Спустя 13 часов, 52 минуты, 50 секунд (22.07.2010 - 10:54) Onehp написал(а):
Basili4, А как это исправить?)

user posted image

Вот что получается, как можно красиво вывести новости? И сделать русские слова и буквы, еще раз прошу прощения wink.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.