|
|
|
| Народ есть такая трабла.
Необходимо сделать объединеие таблиа, но ничего не получается.
Имеется:
Таблица news
| id_news | cat_id | autor | name | body | intro |
| 1 | 1 | guest1 | test | texy | intro |
| 1 | 2 | guest 2 | test | texy | intro |
| 1 | 2 | guest 3 | test | texy | intro |
| 1 | 1 | guest 4 | test | texy | intro |
Таблица cat
| cat_id | cat_name |
| 1 | 1 |
| 1 | 2 |
| 1 | 2 |
| 1 | 1 |
Т.е. при добавлении статьи на сайт из выпадающего списка выбирают Категорию из таблици cat, и при выборе записывается ее цифровое значение - cat_id.
Мне при выводе для пользователя необходимо сопоставить значения цифор таблици news cat_id с таблицей cat cat_id и вывести значение cat_name соответствующее cat_id.
Тобишь в зависимости какая цивра стоит в таблице news в столбце cat_id, сделать выборку из таблицы cat по cat_id и вывести значение соответствующее этому параметру из cat_name.
Что-то не пойму как это сделать....
Прошу помощи | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 00:28)
| |
<?php
$sql = 'SELECT `news`.`id_news` AS `id_news`,'
. ' `news`.`cat_id` AS `cat_id`,'
. ' `news`.`autor` AS `autor`,'
. ' `cat`.`cat_name` AS `catname`'
. ' FROM `news`,`cat`'
. ' WHERE `news`.`cat_id`=`cat`.`cat_id` LIMIT 0, 30';
?>
|
только объединение и выборка всего(что указано в запросе) | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 00:28)
| |
<?php
$sql = 'SELECT `news`.`id_news` AS `id_news`,'
. ' `news`.`cat_id` AS `cat_id`,'
. ' `news`.`autor` AS `autor`,'
. ' `cat`.`cat_name` AS `catname`'
. ' FROM `news`,`cat`'
. ' WHERE `news`.`cat_id`=`cat`.`cat_id` AND `news`.`cat_id`=1 LIMIT 0, 30';
?>
|
а это уже с выборкой определенного cat_id | |
|
|
|
|
|
|
|
для: indexer
(19.04.2007 в 01:18)
| | Спасибо за ответ, но вот что-то все равно не получается. Приведу пример моего скрипта.
<?php
///////////////////////////////////////////////////
// Блок "Новости"
// 2003-2006 (C) IT-студия SoftTime (http://www.softtime.ru)
// Симдянов И.В. (simdyanov@softtime.ru)
// Голышев С.В. (softtime@softtime.ru)
///////////////////////////////////////////////////
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Новости</title>
<link rel="StyleSheet" type="text/css" href="news.css">
</head>
<?php
// Выставляем уровень обработки ошибок (http://www.softtime.ru/info/articlephp.php?id_article=23)
Error_Reporting(E_ALL & ~E_NOTICE);
// Этот файл выводит первые $pnumber новостей
// Устанавлинваем соединение с базой данных
require_once("config.php");
?>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<p class="zagblock">НОВОСТИ</p>
<?php
// Выясняем общее количество новостей в базе данных, для того чтобы
// правильно отображать ссылки на последующие новости.
$tot = mysql_query("SELECT count(*) FROM news WHERE hide='show' AND putdate <= NOW()");
if ($tot)
{
$total = mysql_result($tot,0);
// Если в базе новостей меньше чем $pnumber
// выводим их без вывода ссылки "Все новости".
if($pnumber < $total) echo "<p class='linkblock'><a href=news.php class='linkblock'>Все новости</a>";
}
else puterror("Ошибка при обращении к блоку новостей");
// Запрашиваем все видимые новости, т.е. те, у которых в базе данных hide='show',
// если это поле будет равно 'hide', новость не будет отображаться на странице
$query = "SELECT * FROM news
WHERE hide='show' AND putdate <= NOW()
ORDER BY putdate DESC
LIMIT $pnumber";
$new = mysql_query($query);
if(!$new) puterror("Ошибка при обращении к блоку новостей");
if(mysql_num_rows($new) > 0)
{
echo "<table>";
while($news = mysql_fetch_array($new))
{
echo "<div id=main_body1>";
// Выводим заголовок новости
echo "<tr><td>
<a class=anewsblock href=news.php?id_news=".$news['id_news'].">
<p class=newsblockzag><b>".$news['name']."</b>
</p></a>";
echo "<tr><td>
<p id=bottom_text>Категория: ".
$news['cat_id']." |
Создано:<em class=datanews> ".
$news['putdate']."</em></p>";
// Формируем анонс
// Переменная $numchar содержит примерное
// количество символов в анонсе
$pos = strpos(substr($news['intro'],$numchar), " ");
// Если новость длинная, то выводим троеточие...
if(strlen($news['intro'])>$numchar) $srttmpend = "...";
else $strtmpend = "";
// Выводим анонс
echo "<tr><td class=newsblock>".$news['intro'];
echo "<tr><td><br />
<p id=bottom_text>Автор: <b>".
$news['autor']."</b> |
<a class=anewsblock href=news.php?id_news=".
$news['id_news'].">Подробнее...</a>";
}
echo "</table>";
}
?>
<br><br>
|
Также дамп таблиц...
Структура таблицы `news`
--
CREATE TABLE `news` (
`id_news` int(11) NOT NULL auto_increment,
`cat_id` int(11) NOT NULL default '0',
`autor` tinytext NOT NULL,
`name` tinytext NOT NULL,
`body` text NOT NULL,
`intro` text NOT NULL,
`putdate` datetime NOT NULL default '0000-00-00 00:00:00',
`url` tinytext NOT NULL,
`url_text` tinytext NOT NULL,
`url_pict` tinytext NOT NULL,
`hide` enum('show','hide') NOT NULL default 'show',
PRIMARY KEY (`id_news`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
|
Структура таблицы `cat`
--
CREATE TABLE `cat` (
`cat_id` int(11) NOT NULL auto_increment,
`cat_name` tinytext NOT NULL,
PRIMARY KEY (`cat_id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=6 ;
|
В прикрепленном файле нагляно показана задача... | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 02:18)
| | Я так понял что нужна просто выборка из базы с объединением ну и пишем вернее заменяем то т sql запрос что есть этим
<?php
$query = "SELECT `news`.`id_news` AS `id_news`,
`news`.`cat_id` AS `cat_id`,
`news`.`autor` AS `autor`,
`cat`.`cat_name` AS `cat_name`
FROM `news`,`cat`
WHERE `news`.`cat_id`=`cat`.`cat_id` AND hide='show' AND putdate <= NOW()
LIMIT $pnumber";
?>
|
естественно нужно дописать в него все нужные при выборке поля в секцию select
ну и естественно заменить в коде скрипта где нужен вывод названия каталога вместо$news['cat_id'] написать $news['cat_name'] | |
|
|
|
|
|
|
|
для: indexer
(19.04.2007 в 03:14)
| | поясню по запросу
`news`.`id_news` AS `id_news`,
таблицу news поле id_news выбрать как id_news
WHERE `news`.`cat_id`=`cat`.`cat_id`
объеденить по этим параметрам т.е.
таблица news поле cat_id это тоже самое что и таблица cat поле cat_id
в итоге получается как бы только что созданная новая таблица в которой объеденены обе из запроса по полю cat_id | |
|
|
|
|
|
|
|
для: indexer
(19.04.2007 в 03:19)
| | Большое спасибо, все работает...
Извини за бесспокойство, я начинаю только обучаться и как всегда у меня возникают глупые вопросы.
Еще раз БОЛЬШОЕ СПАСИБО. | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 04:04)
| | Вот почти тоже самое только времени и самого скрипта на отладку нету(и то и другого) но вроде бы должно работать
<?php
$sql = mysql_query("SELECT s.id_news,
s.cat_id,
s.autor,
s.name,
s.body,
s.intro,
DATE_FORMAT(s.pubdate,'%d.%m.%Y') as time_format,
s.url,
s.url_text,
s.url_pic,
c.cat_id,
c.cat_name
FROM news as s LEFT JOIN cat as c on(s.cat_id=c.cat_id)
WHERE s.hide='show' AND s.pubdate<=NOW()
ORDER BY s.pubdate DESC
LIMIT $number");
?>
|
Если есть в нем проблемы или не работает то переделаю.... если получится ;) У меня скрипта новосте и всего остального нет что Вам нужно :( | |
|
|
|
|
|
|
|
для: acdcee
(19.04.2007 в 04:34)
| | Конечно можно и так, но синтаксис разбирать труднее. особенно с так оформленным кодом :) | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 00:28)
| | Возникла такая же проблема | |
|
|
|
|
|
|
|
для: maxfade
(19.04.2007 в 00:28)
| | Понадобилась такая же необходимость, но не получается преобразовать код к своей базе данных
Есть две таблицы
news
id
title
text
cat
В cat прописывается ид из второй таблицы
category
id_cat
name
Помогите составить запрос который бы выводил новости, по категориям, т.е. по cat из таблицы невс
И как потом вывести результат, у меняя выдает ошибку | |
|
|
|
|
|
|
|
для: Sergeous
(21.04.2007 в 20:37)
| | Мне выдает ошибку
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in p:\home\news.ru\www\index.php on line 97
97 - while($news = mysql_fetch_array($new))
Не пойму в чем дело | |
|
|
|
|
|
|
|
для: Sergeous
(22.04.2007 в 16:55)
| | Неплохо было бы показать код. | |
|
|
|