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

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

асс

Мой дом здесь!
Регистрация
13 Окт 2006
Сообщения
762
Реакции
230
Подскажите пожалуйста как вбрать из базы данные из двух полей.

есть таблицы 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 как связывающее звено.


пробовал по разному не вышло. :(
 
лучше бы структуру как есть показал..

Код:
"SELECT nw.*, ct.деньги, ct.интернет, ct.сми
                         FROM news nw
                         LEFT JOIN category ct ON (ct.catid=nw.catid)
                         ORDER BY nw.catid DESC";
 
LEFT JOIN - что делает?
 
лучше бы структуру как есть показал..

Код:
"SELECT nw.*, ct.деньги, ct.интернет, ct.сми
                         FROM news nw
                         LEFT JOIN category ct ON (ct.catid=nw.catid)
                         ORDER BY nw.catid DESC";
Не думаю что нужно в таком запросе вообще использовать LEFT JOIN думаю проще что-то вроде:
Код:
SELECT  news.*, category.* FROM news, category WHERE news.catid = category.catid
 
Вот дамп собственно

--
-- Структура таблицы `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');


жирным и красным выделены связывающие таблицы
 
Смотри мой запрос это то, что тебе нужно :)
 
лучше бы структуру как есть показал..

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


выборка данных идет по 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");



добавли то что выделено жирным и все стало отлично работать.
 
Сноова застрял я с этим чертовым выбором новостей.


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

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

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

-- 
-- Дамп данных таблицы `news`
-- 
INSERT INTO `news` VALUES (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` (
  `catid` int(255) NOT NULL auto_increment,
  `category` varchar(255) default NULL,
  `title_cat` varchar(100) default NULL,
  KEY `catid` (`catid`)
) ENGINE=MyISAM AUTO_INCREMENT=37 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=37 ;
[B]Д[B][/B]амп данных таблицы `razdel`[/B]
INSERT INTO `razdel` VALUES (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
 
1. WHERE id and news.category=razdel.category - это как? Или убери id либо сравнивай его с чем-то.
2. razdel.category=moskva - текст должен быть в кавычках.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху