Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как объединить два запроса в один и вывести общий результат
 
 автор: Владимир22   (19.12.2008 в 12:18)   письмо автору
 
 

Есть таблица вакансий и таблица резюме. Ниже - раздельный поиск по ним.
$search="менеджер";
// первый запрос
$res1=mysql_query("select nomer,vacancy from vak_list where vacancy LIKE='%$search%' order by 'date' desс");
for ($i=0; $i<mysql_num_rows($res1); $i++){
$nomer=mysql_result($res1,$i,$nomer)
$vacancy=mysql_result($res1,$i,$vacancy)
echo "$vacancy - $nomer - вакансия<br>";
}
//второй запрос
$res2=mysql_query("select nomer,rezume from rez_list where rezume LIKE='%$search%' order by 'date' desс");
for ($i=0; $i<mysql_num_rows($res2); $i++){
$nomer=mysql_result($res2,$i,$nomer)
$rezume=mysql_result($res2,$i,$rezume)
echo "$rezume - $nomer - резюме<br>";
}

Вопрос к бывалым: как можно объединить запрос и сделать общий вывод, т.е. чтобы чередовались найденные вакансии и резюме?

  Ответить  
 
 автор: ronin80   (19.12.2008 в 15:39)   письмо автору
 
   для: Владимир22   (19.12.2008 в 12:18)
 

Объедините запросы через UNION

  Ответить  
 
 автор: Владимир22   (19.12.2008 в 16:54)   письмо автору
 
   для: ronin80   (19.12.2008 в 15:39)
 

Насколько я знаю, UNION объединяет только таблицы с одинаковыми ячейками. Но всё равно ещё раз пробую:
$search="менеджер"; 
$res=mysql_query("select nomer,vacancy from vak_list where vacancy LIKE='%$search%' 
UNION select nomer,rezume from rez_list where rezume LIKE='%$search%' order by 'date' desс"); 
for ($i=0; $i<mysql_num_rows($res); $i++){ 
$nomer=mysql_result($res,$i,$nomer) ;
$vacancy=mysql_result($res,$i,$vacancy) ;
$rezume=mysql_result($res,$i,$rezume) 

//ЧТО ЗДЕСЬ НАДО ПИСАТЬ??
//echo "$vacancy - $nomer - вакансия<br>";  ИЛИ
//echo "$rezume- $nomer - резюме<br>"; ???
Кроме того пишет:
mysql_result(): supplied argument is not valid.....
И как узнать резюме это вывело или вакансию?
Прошёлся по всему форуму, нигде ничего внятного не нашёл. Помогите!

  Ответить  
 
 автор: ronin80   (19.12.2008 в 20:16)   письмо автору
 
   для: Владимир22   (19.12.2008 в 16:54)
 

ну добавьте виртуальный столбец с типом

$res=mysql_query("select nomer,vacancy, 1 as type from vak_list where vacancy LIKE='%$search%'
UNION select nomer,rezume, 2 as type from rez_list where rezume LIKE='%$search%' order by 'date' desс");

а затем проверка 1-вакансия, 2-резюме

чёто я насчёт order by date не уверен, это поле есть в обеих таблицах? попробуйте добавьте его в запрос

  Ответить  
 
 автор: Владимир22   (19.12.2008 в 21:03)   письмо автору
 
   для: ronin80   (19.12.2008 в 20:16)
 

Спасибо,ronin80. Но как всё-таки вывести эти вакансии и резюме и как конкретно проверить ЧТО есть вакансия, а что ЧТО резюме. Можно код?

  Ответить  
 
 автор: Trianon   (19.12.2008 в 21:27)   письмо автору
 
   для: Владимир22   (19.12.2008 в 21:03)
 

Вы предложенный запрос выполнили?
Неужели по результату запроса было не определить где что?
Зачем Вам код?

  Ответить  
 
 автор: Владимир22   (19.12.2008 в 22:04)   письмо автору
 
   для: Trianon   (19.12.2008 в 21:27)
 

$res=mysql_query("select nomer,vacancy, 1 as type from vak_list where vacancy LIKE='%$search%' 
UNION select nomer,rezume, 2 as type from rez_list where rezume LIKE='%$search%' order by 'date' desс");
while($str=mysql_fetch_rows($res){
$vacancy =str['vacancy'];
$rezume =str['rezume'];
if($type==1)  $typ="вакансия"; else   $typ="резюме";
echo "$vacancy - $rezume -$typ";
}
Ничего не выходит. Пишет:
mysql_result(): supplied argument is not valid.....
Если кто-то подскажет конкретный и правильный код, буду благодарен. Спасибо заранее.

  Ответить  
 
 автор: Trianon   (19.12.2008 в 22:31)   письмо автору
 
   для: Владимир22   (19.12.2008 в 22:04)
 

date нужно добавить в списки обеих селектов. И взять в `обратные косые кавычки` а не в 'апострофы' .
в том числе и в указании order by

  Ответить  
 
 автор: Владимир22   (22.12.2008 в 09:59)   письмо автору
 
   для: Trianon   (19.12.2008 в 22:31)
 

Упростил задачу (убрал order и пр.), всё равно выводит ошибку.
$res=mysql_query("select vacancy, 1 as type from vak_list UNION select rezume, 2 as type from rez_list ");
while($str=mysql_fetch_array($res){ 
$vacancy =str['vacancy']; 
$rezume =str['rezume']; 
if($type==1)  $typ="вакансия"; else   $typ="резюме"; 
echo $typ; 
}
Постоянно выводит ошибку: ...supplied argument is not valid..... Менял mysql_fetch_array на mysql_fetch_row - бесполезно. Таблицы vak_list и rez_list никак не связаны с друг другом и имеют разное кол-во столбцов. И надо просто сделать общий вывод. Подскажите, что не правильно в выводе?

  Ответить  
 
 автор: Trianon   (22.12.2008 в 10:09)   письмо автору
 
   для: Владимир22   (22.12.2008 в 09:59)
 

во1х, такую ошибку оно выводить не может - функция mysql_result Вами не применяется.

Во2х, всё это происходит потому, что сам SQL-запрос сервер выполнить не смог. В этом случае в $res оказывается false, который Ваш скрипт перед вызовом mysql_result , mysql_fetch_??? и т.п. функций долежн проверять. И при необходимости вызывать и выводить вместо них mysql_error() и завершать выполнение. Всё это Ваш скрипт не делает, поэтому никакой информации о том, из-за чего был отвергнут запрос, не получаете.

  Ответить  
 
 автор: Владимир22   (22.12.2008 в 10:12)   письмо автору
 
   для: Trianon   (22.12.2008 в 10:09)
 

1. Это я ошибся, насчёт mysql_result - просто перепробовал уже всё.
2. Так какой выход? - ведь упростил же уже всё до предела? По отдельности (без UNION) всё выводится (select vacancy и select rezume)..
Сделал:$ result = mysql_query ($res) or die (mysql_error());
пишет: Query was empty (и что это значит ? - ведь по отдельности всё работает)

  Ответить  
 
 автор: Trianon   (22.12.2008 в 10:47)   письмо автору
 
   для: Владимир22   (22.12.2008 в 10:12)
 

>Сделал:$ result = mysql_query ($res) or die (mysql_error());
Здесь $res уже равно false. И какой запрос Вы пытаетесь диагностировать?

  Ответить  
 
 автор: Владимир22   (22.12.2008 в 11:03)   письмо автору
 
   для: Trianon   (22.12.2008 в 10:47)
 

Trianon, так что делать... просто замучался уже. Ещё пишет, что у меня ошибка в синтаксисе "Resourse id#5" at line 1. Что такое id#5 ?

  Ответить  
 
 автор: Trianon   (22.12.2008 в 11:25)   письмо автору
 
   для: Владимир22   (22.12.2008 в 11:03)
 

$sql = "select vacancy, 1 as type from vak_list UNION select rezume, 2 as type from rez_list ";
$res=mysql_query($sql);
if(!$res) exit("Error in $sql : ".mysql_error());
while($str=mysql_fetch_assoc($res))

  $rezume =   $vacancy =str['vacancy']; 
  if($type=='1')  $typ="вакансия"; else   $typ="резюме"; 
  echo $typ; 
}

  Ответить  
 
 автор: Владимир22   (22.12.2008 в 16:09)   письмо автору
 
   для: Trianon   (22.12.2008 в 11:25)
 

Запрос не пустой (mysql_error не ругается) , но выдаёт:
Undefined variable: type... // в строке: if($type=='1')
и штампует в цикле слово "резюме".....

  Ответить  
 
 автор: Trianon   (22.12.2008 в 16:12)   письмо автору
 
   для: Владимир22   (22.12.2008 в 16:09)
 

правильно.
Так наверное значение этой переменной тоже нужно перенести из $str ? Не находите?

  Ответить  
 
 автор: Владимир22   (22.12.2008 в 16:31)   письмо автору
 
   для: Trianon   (22.12.2008 в 16:12)
 

Trianon, спасибо, я понял логику UNION и псевдоимён.
Но как оказалось не до конца, и проблема осталась :((
$sql = "select vacancy, 1 as type from vak_list UNION select rezume, 2 as type from rez_list "; 
$res=mysql_query($sql); 
while($str=mysql_fetch_assoc($res)) 
{  
  $type =str['type']; $vacancy =str['vacancy'];  $rezume =str['rezume'];  
  if($type=='1')  $rabota=$vacancy;  if($type=='2')  $rabota= $rezume; 
  echo $rabota;  //выдаёт ошибку

Не понимает индекс "$rezume" - Undefined variable: rezume Т.е. не может прочитать эти столбцы($rezume) , а вакансии читает. Если запросы поменять местами, то будет читать только резюме. Предполагаю, что это в принципе невозможно с UNION так как объединяются разные столбцы и в данном случае выводится только первый запрос(вакансий). Если я не прав, пожалуйста, поправьте, кто сведущ или подскажите новое или другое решение.

  Ответить  
 
 автор: Владимир22   (24.12.2008 в 14:43)   письмо автору
 
   для: Владимир22   (22.12.2008 в 16:31)
 

Проблема актуальна. Помогите с решением! HELP!

  Ответить  
 
 автор: Trianon   (24.12.2008 в 15:30)   письмо автору
 
   для: Владимир22   (22.12.2008 в 16:31)
 

и вакансии и резюме у Вас в результате присутствуют под первым именем - str['vacancy']
строку $rezume = $vacancy =str['vacancy']; я написал не просто так.

  Ответить  
 
 автор: Владимир22   (24.12.2008 в 16:11)   письмо автору
 
   для: Trianon   (24.12.2008 в 15:30)
 

А как сделать, чтобы выводило и то, и то - поочерёдно?

  Ответить  
 
 автор: Trianon   (25.12.2008 в 00:33)   письмо автору
 
   для: Владимир22   (24.12.2008 в 16:11)
 

А кто гарантирует что обе последовательности имеют одинаковую длину?
Поставленной цели (довольно абсурдной с точки зрения здравого смысла) куда проще достичь, выполнив два запроса, и после этого параллельно расхлебав потоки их результатов.

Я пьяна, извините.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования