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

Тема в разделе "Базы данных", создана пользователем goodvin, 19 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    Код:
    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 а в некоторых нету.
    Результат масив.
     
  2. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    ты бы выложил структуру таблиц и зависимости между ними, а то непонятно что откуда берется
     
  3. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    Код:
     
    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 ;
     
    
     
  4. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    И любую таблицу так, только псевдонимы им давай или к полям допысывай названия таблиц
     
    goodvin нравится это.
  5. pslava

    pslava

    Регистр.:
    16 май 2007
    Сообщения:
    618
    Симпатии:
    122
    объединить в один запрос не получиться, потому что в таблицах может быть разное количество записей на пользователя( того на ком они числяться) adid, например видеофайлов и рисунков - и получиться фигня, лучше обрабатывать потаблично.

    Вот навскидку написал пхп-код, который возвращает масив из 4 массивов:
    PHP:
        $resmysql_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;
        
        
    $resmysql_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;

        
    $resmysql_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;
        

        
    $resmysql_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;
        
    Получаешь результатом масив всех рисунков, видеофайлов, документов и избранных, на конкретного юзверя
     
    goodvin нравится это.
  6. goodvin

    goodvin Человек-Волшебник

    Регистр.:
    27 июн 2006
    Сообщения:
    667
    Симпатии:
    687
    не работает если нет записи с юзером в избраном.
     
  7. AndreyD2

    AndreyD2

    Регистр.:
    21 окт 2008
    Сообщения:
    194
    Симпатии:
    67
    Потомо что ты не сказал про таблицу user
    Начинай джонить таблицы с user
    Исправь так

    Select .... from user
    left join $fav_tbl On $fav_tbl.$ad_id = user.id
    ...
    where id = XXX
     
    goodvin нравится это.
Статус темы:
Закрыта.