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

Форум MySQL

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

 

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

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

тема: Помогите с сортировкой и выводом по двум таблицам
 
 автор: golovdinov   (09.05.2007 в 14:06)   письмо автору
 
 

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

CREATE TABLE articles (
  id INT(6) NOT NULL AUTO_INCREMENT,
  category TINYTEXT,
  header TINYTEXT,
  body TEXT,
  author TINYTEXT,
  date INT(15),
  PRIMARY KEY (id)
) TYPE=MyISAM;


И таблица с разделами:

CREATE TABLE categories (
  id INT(6) NOT NULL AUTO_INCREMENT,
  name TINYTEXT,
  header TINYTEXT,
  desc TEXT,
  PRIMARY KEY (id)
) TYPE=MyISAM;


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

Мне надо сделать вывод категорий, отсортированных по количеству статей в них, в порядке убывания.

Прошу вашей помощи. Очень буду рад практическим примерам с комментариями.

   
 
 автор: Trianon   (09.05.2007 в 14:24)   письмо автору
 
   для: golovdinov   (09.05.2007 в 14:06)
 

В Вашем примере неясно, как связаны эти таблицы. Точнее, ясно, что связаны они некорректно.
В таблице articles нет поля, которое бы указывало бы на первичный ключ id таблицы categories

   
 
 автор: golovdinov   (09.05.2007 в 17:20)   письмо автору
 
   для: Trianon   (09.05.2007 в 14:24)
 

http://softtime.ru/forum/read.php?id_forum=3&id_theme=35768&page=1 - здесь вы мне писали код, но я абсолютно в нем не разобрасля и потом я не понимаю как все это прикрутить к PHP запросу и выводу :(

   
 
 автор: mr Bin   (09.05.2007 в 18:36)   письмо автору
 
   для: golovdinov   (09.05.2007 в 17:20)
 

Хочу уточнить:
Я правильно понял, что у Вас есть разделы и к этим разделам статьи?
Чтобы определить какая статья к какому разделу относится, у Вас есть одинаковое поле в обеих таблицах.
И вы хотите вывести разделы в порядке убывания, т.е. в зависимости от количества там статей?

   
 
 автор: Trianon   (09.05.2007 в 20:06)   письмо автору
 
   для: golovdinov   (09.05.2007 в 17:20)
 

Пока у Вас будет "category в таблице со статьями соответствует name в таблице категорий" вместо "я убрал поле category из таблицы articles и вместо него добавил поле category_id INT(11) - оно у меня соответствует полю id в строке раздела из таблицы categories" , я врядли смогу Вам помочь.

Посудите сами - захочется Вам скорректировать имя одной категории - сколько строк Вы будете менять?

   
 
 автор: golovdinov   (09.05.2007 в 21:19)   письмо автору
 
   для: Trianon   (09.05.2007 в 20:06)
 

to mr Bin все правильно.

to Trianon я подумаю над вашим предложением :) но у меня все-равно статьи все уникальными name, вы уверенны что из этого ничего не получится?

   
 
 автор: Trianon   (09.05.2007 в 22:20)   письмо автору
 
   для: golovdinov   (09.05.2007 в 21:19)
 

Конечно, получится.

   
 
 автор: golovdinov   (09.05.2007 в 22:29)   письмо автору
 
   для: Trianon   (09.05.2007 в 22:20)
 

Будьте так любезны, напишите наглядный пример с комментариями, а то очень мне нужно это понять и знать, поскольку тут уже несколько подобных проблем намечается :(

   
 
 автор: Sergeous   (09.05.2007 в 21:59)   письмо автору
 
   для: Trianon   (09.05.2007 в 20:06)
 

А вот если у меня в таблице news в поле id_category соответствует id_category из таблицы category где есть название категории.

Как мне вывести все новости, и чтобы рядом было название категории?...

Вот как сделать соответствие id_category (news) = id_category (category) - name
Вообщем чтобы вместо id в результате выводилось название категории... ?

   
 
 автор: golovdinov   (09.05.2007 в 22:25)   письмо автору
 
   для: Sergeous   (09.05.2007 в 21:59)
 

Я это делаю подобным образом:

<?
$get_news 
mysq_query ("SELECT * FROM news ....");
while (
$news mysql_fetch_array ($get_news)) {
  
$category mysql_fetch_array (mysql_query ("SELECT name FROM categories WHERE category_id = '".$news['category_id']."'"));
  print 
$category['name'];
}
?>


Мож мне кто поможет???

   
 
 автор: mr Bin   (09.05.2007 в 22:30)   письмо автору
 
   для: golovdinov   (09.05.2007 в 22:25)
 

Откуда взялась таблица news?

   
 
 автор: golovdinov   (09.05.2007 в 22:33)   письмо автору
 
   для: mr Bin   (09.05.2007 в 22:30)
 

Так это ж насчет вопроса Sergeous.

   
 
 автор: mr Bin   (09.05.2007 в 22:36)   письмо автору
 
   для: golovdinov   (09.05.2007 в 22:33)
 

аа..

   
 
 автор: Trianon   (09.05.2007 в 23:08)   письмо автору
 
   для: Sergeous   (09.05.2007 в 21:59)
 

Список новостей с указанием категорий можно получить примерно так:


<?php

$sql 
"SELECT news.id_news, news.txt, category.id_category, category.name
  FROM news
    LEFT JOIN category ON news.id_category = category.id_category"
;
$res mysql_query($sql) or die("Error in $sql: ".mysql_error());
while(
$row mysql_fetch_assoc($res))
{
    
$id_news $row['id_news'];
    
$id_category $row['id_category'];
    
$news_txt nl2br(htmlspecialchars($row['txt']));
    
$name htmlspecialchars($row['name']);

    echo 
"<br/>News $id_news from category $id_category ($name):<br/>$news_txt<br/>";
}

?>


Список категорий с количеством новостей в них может быть получен примерно так


<?php

$sql 
"
SELECT category.id_category, category.name, tabcnt.cnt
FROM category
LEFT JOIN
  (SELECT COUNT(id_news) AS cnt, id_category
   FROM news
    GROUP BY id_category)
  AS tabcnt ON category.id_category = tabcnt.id_category
  WHERE tabcnt.cnt > 0
  ORDER BY tabcnt.cnt DESC
  "
;
$res mysql_query($sql) or die("Error in $sql: ".mysql_error());
while(
$row mysql_fetch_assoc($res))
{
    
$id_category $row['id_category'];
    
$name htmlspecialchars($row['name']);    
    
$cnt $row['cnt'];
    
    echo 
"Category $id_category ($name) have $cnt entries<br/>";
}

?>

   
Rambler's Top100
вверх

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