Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите с объединением таблиц
 
 автор: maxfade   (19.04.2007 в 00:28)   письмо автору
 
 

Народ есть такая трабла.

Необходимо сделать объединеие таблиа, но ничего не получается.

Имеется:
Таблица 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.

Что-то не пойму как это сделать....

Прошу помощи

   
 
 автор: indexer   (19.04.2007 в 01:15)   письмо автору
 
   для: 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'
?>

только объединение и выборка всего(что указано в запросе)

   
 
 автор: indexer   (19.04.2007 в 01:18)   письмо автору
 
   для: 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

   
 
 автор: maxfade   (19.04.2007 в 02:18)   письмо автору
 
   для: 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(!
$newputerror("Ошибка при обращении к блоку новостей");
  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>Категория: &nbsp;"
.
$news['cat_id']."&nbsp;|&nbsp;&nbsp;
Создано:<em class=datanews>&nbsp;"
.
$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>Автор:&nbsp;<b>"
.
$news['autor']."</b>&nbsp;&nbsp;|&nbsp;
&nbsp;<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 ;


В прикрепленном файле нагляно показана задача...

   
 
 автор: indexer   (19.04.2007 в 03:14)   письмо автору
 
   для: 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:19)   письмо автору
 
   для: 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

   
 
 автор: maxfade   (19.04.2007 в 04:04)   письмо автору
 
   для: indexer   (19.04.2007 в 03:19)
 

Большое спасибо, все работает...

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

Еще раз БОЛЬШОЕ СПАСИБО.

   
 
 автор: acdcee   (19.04.2007 в 04:34)   письмо автору
 
   для: 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");
?>

Если есть в нем проблемы или не работает то переделаю.... если получится ;) У меня скрипта новосте и всего остального нет что Вам нужно :(

   
 
 автор: indexer   (21.04.2007 в 18:05)   письмо автору
 
   для: acdcee   (19.04.2007 в 04:34)
 

Конечно можно и так, но синтаксис разбирать труднее. особенно с так оформленным кодом :)

   
 
 автор: Sergeous   (21.04.2007 в 20:37)   письмо автору
 
   для: maxfade   (19.04.2007 в 00:28)
 

Возникла такая же проблема

   
 
 автор: Sergeous   (21.04.2007 в 20:37)   письмо автору
 
   для: maxfade   (19.04.2007 в 00:28)
 

Понадобилась такая же необходимость, но не получается преобразовать код к своей базе данных

Есть две таблицы

news

id
title
text
cat

В cat прописывается ид из второй таблицы

category

id_cat
name

Помогите составить запрос который бы выводил новости, по категориям, т.е. по cat из таблицы невс

И как потом вывести результат, у меняя выдает ошибку

   
 
 автор: Sergeous   (22.04.2007 в 16:55)   письмо автору
 
   для: 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))


Не пойму в чем дело

   
 
 автор: Trianon   (22.04.2007 в 20:59)   письмо автору
 
   для: Sergeous   (22.04.2007 в 16:55)
 

Неплохо было бы показать код.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования