За последние 24 часа нас посетили 21132 программиста и 1627 роботов. Сейчас ищет 1431 программист ...

Вывод через один запрос массив данных из двух таблиц

Тема в разделе "PHP и базы данных", создана пользователем Mr.Miksar, 24 апр 2010.

  1. Mr.Miksar

    Mr.Miksar Активный пользователь

    С нами с:
    4 дек 2009
    Сообщения:
    24
    Симпатии:
    0
    Адрес:
    Нижний Новгород
    Привет всем!
    Надеюсь на помощь гуру!
    Есть запрос
    Код (Text):
    1.  
    2. $arr_query = $db->sql_query("SELECT *
    3. FROM ".$config['dbprefix']."news AS a
    4. LEFT JOIN ".$config['dbprefix']."story AS b ON (a.id=b.post_id)
    5. LEFT JOIN ".$config['dbprefix']."fields AS f ON (a.id=f.content_id)
    6. WHERE a.hidden='0' AND a.id='".$id."' LIMIT 0,1");
    7. $query = array($db->sql_fetchrow($arr_query));
    Что мы имеем.
    1 новость (за неё отвечают таблицы story и news) и доп поля (таблица fields). Т.е. допустим есть новость с id = 5. Этой новости в таблице fields соответствуют несколько записей. Выборка по content_id (т.е. LEFT JOIN ".$config['dbprefix']."fields AS f ON (a.id=f.content_id)).
    Проблема в том, что конструкция LEFT JOIN ".$config['dbprefix']."fields позволяет мне получить только одну запись а не все соответствующие выборке.

    Вопрос.
    Как сделать так, что бы все соответствующие записи из ".$config['dbprefix']."fields выводились через 1 запрос?


    для большей наглядности предоставлю структуру таблиц:

    Код (Text):
    1.  
    2. CREATE TABLE IF NOT EXISTS `{pref}fields` (
    3.   `fid` int(11) NOT NULL auto_increment,
    4.   `modul` varchar(255) default NULL,
    5.   `content_id` int(11) NOT NULL,
    6.   `fname` text,
    7.   `fvalue` text,
    8.   `fnum` int(11) NOT NULL,
    9.   `status` int(11) NOT NULL,
    10.   `add_one` text,
    11.   `add_two` text,
    12.   PRIMARY KEY  (`fid`)
    13. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1;
    14.  
    15.  
    16. CREATE TABLE IF NOT EXISTS `{pref}news` (
    17.   `date` int(11) NOT NULL,
    18.   `author` varchar(255) default NULL,
    19.   `title` varchar(255) NOT NULL,
    20.   `c_short` int(11) NOT NULL,
    21.   `c_full` int(11) NOT NULL,
    22.   `avatar` varchar(255) NOT NULL,
    23.   `category` varchar(255) NOT NULL,
    24.   `url` varchar(255) NOT NULL,
    25.   `id` int(11) NOT NULL auto_increment,
    26.   `views` int(11) NOT NULL,
    27.   `comments` int(11) NOT NULL,
    28.   `hidden` tinyint(1) NOT NULL,
    29.   `sticky` tinyint(1) NOT NULL,
    30.   `keywords` varchar(255) NOT NULL,
    31.   `type` varchar(255) NOT NULL,
    32.   `parent` int(11) NOT NULL,
    33.   `level` int(11) NOT NULL,
    34.   `password` varchar(255) NOT NULL,
    35.   `rating` int(11) NOT NULL,
    36.   `votes` int(11) NOT NULL,
    37.   `template` varchar(255) NOT NULL,
    38.   PRIMARY KEY  (`id`)
    39. ) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;
    40.  
    41. CREATE TABLE IF NOT EXISTS `{pref}story` (
    42.   `post_id` int(11) NOT NULL auto_increment,
    43.   `short` text NOT NULL,
    44.   `full` longtext NOT NULL,
    45.   `metatitle` text NOT NULL,
    46.   `metakeywords` text NOT NULL,
    47.   `metadescription` text NOT NULL,
    48.   `ico` text NOT NULL,
    49.   `add_comm` text,
    50.   `stop_comm` text,
    51.   `format` varchar(15) NOT NULL default 'html_with_br',
    52.   `two` text NOT NULL,
    53.   `three` text NOT NULL,
    54.   PRIMARY KEY  (`post_id`)
    55. ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;