|
|
|
| Подобный вопрос я уже задовал, но так и не разобрался :(
У меня есть таблица со статьями:
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 в таблице категорий.
Мне надо сделать вывод категорий, отсортированных по количеству статей в них, в порядке убывания.
Прошу вашей помощи. Очень буду рад практическим примерам с комментариями. | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 14:06)
| | В Вашем примере неясно, как связаны эти таблицы. Точнее, ясно, что связаны они некорректно.
В таблице articles нет поля, которое бы указывало бы на первичный ключ id таблицы categories | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 14:24)
| | http://softtime.ru/forum/read.php?id_forum=3&id_theme=35768&page=1 - здесь вы мне писали код, но я абсолютно в нем не разобрасля и потом я не понимаю как все это прикрутить к PHP запросу и выводу :( | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 17:20)
| | Хочу уточнить:
Я правильно понял, что у Вас есть разделы и к этим разделам статьи?
Чтобы определить какая статья к какому разделу относится, у Вас есть одинаковое поле в обеих таблицах.
И вы хотите вывести разделы в порядке убывания, т.е. в зависимости от количества там статей? | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 17:20)
| | Пока у Вас будет "category в таблице со статьями соответствует name в таблице категорий" вместо "я убрал поле category из таблицы articles и вместо него добавил поле category_id INT(11) - оно у меня соответствует полю id в строке раздела из таблицы categories" , я врядли смогу Вам помочь.
Посудите сами - захочется Вам скорректировать имя одной категории - сколько строк Вы будете менять? | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 20:06)
| | to mr Bin все правильно.
to Trianon я подумаю над вашим предложением :) но у меня все-равно статьи все уникальными name, вы уверенны что из этого ничего не получится? | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 21:19)
| | Конечно, получится. | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 22:20)
| | Будьте так любезны, напишите наглядный пример с комментариями, а то очень мне нужно это понять и знать, поскольку тут уже несколько подобных проблем намечается :( | |
|
|
|
|
|
|
|
для: Trianon
(09.05.2007 в 20:06)
| | А вот если у меня в таблице news в поле id_category соответствует id_category из таблицы category где есть название категории.
Как мне вывести все новости, и чтобы рядом было название категории?...
Вот как сделать соответствие id_category (news) = id_category (category) - name
Вообщем чтобы вместо id в результате выводилось название категории... ? | |
|
|
|
|
|
|
|
для: 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'];
}
?>
|
Мож мне кто поможет??? | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 22:25)
| | Откуда взялась таблица news? | |
|
|
|
|
|
|
|
для: mr Bin
(09.05.2007 в 22:30)
| | Так это ж насчет вопроса Sergeous. | |
|
|
|
|
|
|
|
для: golovdinov
(09.05.2007 в 22:33)
| | аа.. | |
|
|
|
|
|
|
|
для: 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/>";
}
?>
|
| |
|
|
|