Помогите несколько запросов сложить в один

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

goodvin

Человек-Волшебник
Регистрация
27 Июн 2006
Сообщения
667
Реакции
694
Код:
select fid from $fav_tbl where f_adid=$ad_id
select video_id, video_file from $vid_tbl where video_adid=$ad_id
select f_id,f_file from $doc_tbl where f_adid=$ad_id
select id,filename from $pic_tbl where pic_ad_id=$ad_id
Помогите сложить в одни запрос.

В некоторых таблицах есть данные с $ad_id а в некоторых нету.
Результат масив.
 
ты бы выложил структуру таблиц и зависимости между ними, а то непонятно что откуда берется
 
Код:
CREATE TABLE IF NOT EXISTS `board_favourites` (
  `fid` int(11) NOT NULL auto_increment,
  `f_user_id` int(11) default '0',
  `f_adid` int(11) default '0',
  PRIMARY KEY  (`fid`),
  KEY `f_user_id` (`f_user_id`),
  KEY `f_adid` (`f_adid`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=100 ;
CREATE TABLE IF NOT EXISTS `board_picture` (
  `id` int(4) NOT NULL auto_increment,
  `pic_ad_id` int(11) default '0',
  `filename` varchar(50) default '0',
  `main` int(11) default '0',
  PRIMARY KEY  (`id`),
  KEY `pic_ad_id` (`pic_ad_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=12370 ;
CREATE TABLE IF NOT EXISTS `board_upload_files` (
  `f_id` int(11) NOT NULL auto_increment,
  `f_file` varchar(155) default '0',
  `f_adid` int(11) default '0',
  PRIMARY KEY  (`f_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=28 ;
CREATE TABLE IF NOT EXISTS `board_video` (
  `video_id` int(11) NOT NULL auto_increment,
  `video_file` varchar(155) default '0',
  `video_adid` int(11) default '0',
  PRIMARY KEY  (`video_id`),
  KEY `video_adid` (`video_adid`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
 
select $fav_tbl.fid, $vid_tbl.video_id, $vid_tbl.video_file, $doc_tbl.f_id,$doc_tbl.f_file, $pic_tbl.id,$pic_tbl.filename from $fav_tbl
left join $vid_tbl On $vid_tbl.video_adid=$ad_id
left join $doc_tbl on $doc_tbl.f_adid=$ad_id
left join $pic_tbl On $pic_tbl.pic_ad_id=$ad_id
where $fav_tbl.f_adid=$ad_id

И любую таблицу так, только псевдонимы им давай или к полям допысывай названия таблиц
 
объединить в один запрос не получиться, потому что в таблицах может быть разное количество записей на пользователя( того на ком они числяться) adid, например видеофайлов и рисунков - и получиться фигня, лучше обрабатывать потаблично.

Вот навскидку написал пхп-код, который возвращает масив из 4 массивов:
PHP:
	$res= mysql_query("select fid from $fav_tbl where f_adid=$ad_id");
	$result = array();
	$fav = array();
	while($rec=mysql_fetch_object($res)){
		$fav[]=$rec->fid;
	}
	$result["favorite"] = $fav;
	
	$res= mysql_query("select video_id, video_file from $vid_tbl where video_adid=$ad_id");
	$video = array();
	while($rec=mysql_fetch_object($res)){
		$video[]=$rec->video_file;
	}
	$result["video"] = $video;

	$res= mysql_query("select f_id,f_file from $doc_tbl where f_adid=$ad_id");
	$files = array();
	while($rec=mysql_fetch_object($res)){
		$files[]=$rec->f_file;
	}
	$result["files"] = $files;
	

	$res= mysql_query("select id,filename from $pic_tbl where pic_ad_id=$ad_id");
	$pics = array();
	while($rec=mysql_fetch_object($res)){
		$pics[]=$rec->filename;
	}
	$result["pics"] = $pics;

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

Select .... from user
left join $fav_tbl On $fav_tbl.$ad_id = user.id
...
where id = XXX
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху