sql не осиливаю запрос .

Тема в разделе "PHP", создана пользователем асс, 14 апр 2009.

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

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Подскажите пожалуйста как вбрать из базы данные из двух полей.

    есть таблицы news b таблица category

    так выбираю данные из таблицы news
    mysql_query("SELECT * FROM news WHERE cpu='".$cpu."'

    cpu это название статьи такого вида
    sm/demo/bilayn_ppedlagaet_becplatnyie_bxodyaschie_b_pouminge.html


    но есть еще одна таблица категорий имя ее category .
    так вот

    таблица news имеет поле catid в которое заносититься номер категории
    1 2 и тд.

    Сама же таблица категорий имеет т поле catid
    в нем значения
    в ней имею записи вида
    деньги
    интернет
    сми



    мне надо чтоб из обоих таблиц выбирались данные
    из таблицы news новости.
    А из таблицы category имя категории, к которой новость относиться. Номер который задан в таблице news поле catid как связывающее звено.


    пробовал по разному не вышло. :(
     
  2. Mr.Emm

    Mr.Emm Постоялец

    Регистр.:
    5 май 2008
    Сообщения:
    145
    Симпатии:
    108
    лучше бы структуру как есть показал..

    Код:
    "SELECT nw.*, ct.деньги, ct.интернет, ct.сми
                             FROM news nw
                             LEFT JOIN category ct ON (ct.catid=nw.catid)
                             ORDER BY nw.catid DESC";
     
  3. humster

    humster Создатель

    Регистр.:
    8 апр 2008
    Сообщения:
    15
    Симпатии:
    1
    LEFT JOIN - что делает?
     
  4. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
  5. Lonely Wolf

    Lonely Wolf Прохожие

    Не думаю что нужно в таком запросе вообще использовать LEFT JOIN думаю проще что-то вроде:
    Код:
    SELECT  news.*, category.* FROM news, category WHERE news.catid = category.catid
     
  6. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Вот дамп собственно

    --
    -- Структура таблицы `category`
    --

    CREATE TABLE `category` (
    `catid` int(50) NOT NULL auto_increment,
    `title_cat` varchar(100) default NULL,
    `cpu_cat` varchar(125) default NULL,
    KEY `catid` (`catid`)
    ) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=13 ;

    --
    -- Дамп данных таблицы `category`
    --

    INSERT INTO `category` VALUES (1, 'политика', 'politika');
    INSERT INTO `category` VALUES (2, 'новости', 'news');
    INSERT INTO `category` VALUES (3, 'интернет', 'internet');
    INSERT INTO `category` VALUES (0, 'Сегодня', 'segodnya');
    INSERT INTO `category` VALUES (4, 'MTS', 'mts');
    INSERT INTO `category` VALUES (5, 'Билайн', 'Beeline');
    INSERT INTO `category` VALUES (6, 'Utel', 'utel');
    INSERT INTO `category` VALUES (7, 'Байкалвестком', 'baikal');

    -- --------------------------------------------------------

    --
    -- Структура таблицы `news`
    --

    CREATE TABLE `news` (
    `id` smallint(11) NOT NULL auto_increment,
    `title` varchar(200) default NULL,
    `author` varchar(100) default NULL,
    `dates` text,
    `anons` text,
    `text` text,
    `url_istok` varchar(255) default NULL,
    `views` varchar(155) default NULL,
    `status` varchar(255) default NULL,
    `cpu` varchar(55) default NULL,
    `md5` varchar(255) default NULL,
    `catid` int(50) default NULL,
    `logo` varchar(255) NOT NULL,
    UNIQUE KEY `md5` (`md5`),
    KEY `id` (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;

    --
    -- Дамп данных таблицы `news`
    --

    INSERT INTO `news` VALUES (1, 'Билaйн пpeдлaгaeт бecплaтныe Bxoдящиe B poуmингe ', 'викусик', '2009-04-14 12:44:49', ' <p>13 aпpeля 2009 гoдa, МockBa. ОАО ВыmпeлКom (тoBapный знak Билaйн) oбъяBляeт o зaпуcke уcлуги Нaшa cтpaнa, бecплaтныe Bxoдящиe B poуmингe </a> ', 'releases/index.wbp?id=33ca3c1e-4daa-4008-b5fa-c18597265314', '', '0', 'bilayn_ppedlagaet_be', '12dbc19ccdac124ed8975c27490c82e6', 5, 'logo/beeline.gif');


    жирным и красным выделены связывающие таблицы
     
  7. Lonely Wolf

    Lonely Wolf Прохожие

    Смотри мой запрос это то, что тебе нужно :)
     
  8. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221

    выборка данных идет по WHERE cpu='".$cpu."
    запрос полный
    $Q2 = mysql_query("SELECT * FROM news WHERE cpu='".$cpu."' ");

    но здесь все идет из одной таблицы. при подключении другой таблицы ничего не выводится.

    Добавлено через 4 минуты
    отдает зараза номер 4 во всех статьях а название
    категория не отдает


    вот запрос на выборку новостей


    HTML:
     $Q2 = mysql_query("SELECT  news.*, category.* FROM news, category WHERE news.catid = category.catid ");
    if(mysql_num_rows($Q2) >0) {
    $r = mysql_fetch_array($Q2);
    $title =stripslashes($r['title']);  //Название статьи
     $u=$r['url_istok'];
      $u=str_replace('"',"",$u);
       $dates= $r['date_up'];
       $view=$r['views'];
       $author= $r['author'];
    echo  $ucat=$r['catid'];
    отдает 4


    этот $Q2 = mysql_query("SELECT * FROM news WHERE cpu='".$cpu."' "); отдает тоже самое.

    где то у меня ошибка видать


    У меня сначала превью новости выводитьс ян а страницу.
    if($cp =$_GET['id']=='') {$cp =$_GET['cpu']==''; } //Проверяем входную перменную id или cpu

    если новость без чпу то отдает id=номер новости, если нет то чпу

    Добавлено через 20 минут
    Вот я дятел :D

    хочу получить название категории выбирая catid /

    Название сидит в title_cat
    Вот что значит много думать.

    Блин теперь выдает только категорию мтс

    Добавлено через 45 минут
    Подправил запрос так
    $Q2 = mysql_query("SELECT news.*, category.* FROM news, category WHERE news.catid = category.catid and cpu='".$cpu."' LIMIT $start,$per_page");



    добавли то что выделено жирным и все стало отлично работать.
     
  9. асс

    асс

    Регистр.:
    13 окт 2006
    Сообщения:
    756
    Симпатии:
    221
    Сноова застрял я с этим чертовым выбором новостей.


    Проблемма такая есть категории.
    Если нажать на категорию то должы выводиться носоти из нее.
    Вот дамп базы

    PHP:
     
    -- Структура таблицы `news`
    -- 

    CREATE TABLE `news` (
      `
    idsmallint(11NOT NULL auto_increment,
      `
    titlevarchar(200) default NULL,
      `
    authorvarchar(100) default NULL,
      `
    datestext,
      `
    texttext,
      `
    url_istokvarchar(255) default NULL,
      `
    viewsvarchar(155) default NULL,
      `
    statusvarchar(255) default NULL,
      `
    cpuvarchar(255) default NULL,
      `
    md5varchar(255) default NULL,
      `
    categoryvarchar(255) default NULL,
      
    UNIQUE KEY `md5` (`md5`),
      
    KEY `id` (`id`)
    ENGINE=MyISAM AUTO_INCREMENT=48 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=48 ;

    -- 
    -- 
    Дамп данных таблицы `news`
    -- 
    INSERT INTO `newsVALUES (47'ашли контраргументы. Выступление отрицания в первом туре не столько ...''"http://www.zrpress.ru/web/2009/38/3"''51''0''_quot_indigo_quot__obsuzhdali_perspektivy_zhenschiny_byt_prezidentom_rossii''4e513f84a493a847ad02fdbd333418a1''24');

    -- --------------------------------------------------------

    -- 
    -- 
    Структура таблицы `razdel`
    -- 

    CREATE TABLE `razdel` (
      `
    catidint(255NOT NULL auto_increment,
      `
    categoryvarchar(255) default NULL,
      `
    title_catvarchar(100) default NULL,
      
    KEY `catid` (`catid`)
    ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=37 ;
    [
    B]Д[B][/B]амп данных таблицы `razdel`[/B]
    INSERT INTO `razdelVALUES (3'moskva''Москва');
     
            


    есть поле в таблице razdel
    catid его значение = 2
    есть поле в этой же таблице
    название gategory


    пробую выбрать новости из категории. по catid выборка нормлаьно.
    Если пробую выбрать по gategory не работает


    if(isset ($_GET['category'])) {
    $Q1 = mysql_query("SELECT * FROM news,razdel WHERE id and news.category=razdel.category and razdel.category=moskva ORDER BY id desc LIMIT 20");
    }


    не могу понять как заставить работать скрипт. чтоб не по цифрам
    типа category=2

    а по словам например
    category=moskva
     
  10. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    1. WHERE id and news.category=razdel.category - это как? Или убери id либо сравнивай его с чем-то.
    2. razdel.category=moskva - текст должен быть в кавычках.
     
Статус темы:
Закрыта.