|
|
|
|
|
для: Visavi
(23.09.2009 в 21:59)
| | Э... а вот это уже причина для группирующего запроса, и повод подучить язык. :) | |
|
|
|
|
|
|
|
для: Trianon
(23.09.2009 в 19:52)
| | можно ли тогда как-нибудь вывести число этих подфорумов если они есть, и 0 если их нет? Без вывода самих подфорумов | |
|
|
|
|
|
|
|
для: Visavi
(23.09.2009 в 18:52)
| | Тогда Вам наверное на этом этапе не стоит применять группирующие запросы вообще.
Сперва подучить SQL, а потом уже...
Тем более, что как я вижу, Ваша задача их применения не требует. | |
|
|
|
|
|
|
|
для: Trianon
(23.09.2009 в 16:48)
| | Я просто не очень хорошо знаком с запросами, работаю с sql всего пару месяцев, для меня еще многое не знакомо, подскажите пожалуйста как правильно сделать | |
|
|
|
|
|
|
|
для: Visavi
(23.09.2009 в 16:09)
| | Про ущербность запроса вида SELECT f1.*, ...GROUP BY f1.forums_id я писал на этом форуме с полдюжины раз наверняка, а то и больше. А с последней отповеди прошло никак не больше недели.
Вы издеваетесь изощренно таким образом чтоли? | |
|
|
|
|
|
|
|
для: Trianon
(23.09.2009 в 15:17)
| | А если сделать так
SELECT f1.*, f2.forums_id AS subforums_id FROM forums f1
LEFT JOIN forums f2 ON f2.forums_parent = f1.forums_id
WHERE f1.forums_parent = 0
GROUP BY f1.forums_id ORDER BY f1.forums_order ASC;
|
и при выводе форумов если subforums_id>0 то делать подзапрос и выводить список подфорумом
так нормально будет? | |
|
|
|
|
|
|
|
для: heed
(23.09.2009 в 15:27)
| | Работает, но безо всякой гарантии.
Стоит пару строк убрать/добавить, и всё посыпется. | |
|
|
|
|
|
|
|
для: Trianon
(23.09.2009 в 14:04)
| | Но работает-же,)
CREATE TABLE `ctg` (
`id` SMALLINT unsigned NOT NULL AUTO_INCREMENT,
`lvl` TINYINT unsigned NOT NULL DEFAULT '0',
`dscr` varchar(225) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
INSERT INTO ctg (lvl, dscr)
VALUES
(1,'первый уровень'),(1,'второй первый уровень'),
(2,'подуровень второго'),
(2,'второй подуровень второго'),
(2,'третий подуровень аторого'),
(3,'подуровеньтретьего подуровня'),
(1,'уровень три'),
(2,'подуровень уровня три'),
(1,'уровень четыре'),
(1,'уровень пять'),
(2,'уровень пять один'),
(3,'уровень пять один один'),
(4,'уровень пять один один один'),
(3,'уровень пять один два'),
(1,'уровень восемь');
SELECT * FROM ctg c;
|
думаю нигде в мануалах не запрещено перенаваливать таблицу после каждого изменения в ней :)
<?
function list_print($t = 0, $txt='' ) {
global $itr;
static $mem = '';
static $last = 1;
if ($t == -1) { // если завершение
echo '<li>' . $mem . '</li>' . "\n"
. str_repeat( '</ol>' . "\n"
.'</li>' . "\n ", ($itr - 1)) . '</ol></div>' . "\n";
return ;
}
if ($itr == 0) { // если главный пункт
echo '<div id="map"><ol>' ."\n";
$mem = $txt;
}
else if ($t == $itr) {
echo'<li>' . $mem . '</li>' . "\n";
}
else if ($t > $itr) {
echo '<li>' . $mem
.'<ol>' . "\n";
}
else if ($t < $itr) {
echo '<li>' . $mem . '</li>' . "\n"
. str_repeat('</ol>' . "\n" .'</li>' . "\n ", ($itr-$t));
}
$itr = $t;
$mem = $txt;
} # end of menu_print()
###########################
$dbserv = 'localhost';
$dbname = 'xdb';
$dbuser = 'root';//'root';//
$dbpassword = 'root';//'';//
if (!$link = @mysql_connect( $dbserv, $dbuser, $dbpassword))
s_error(true, 'MySQL not available.', true);
if (!mysql_select_db($dbname, $link)) s_error(true, 'база данных ' . $dbname . ' недоступна', true);
mysql_query('SET NAMES "cp1251"');
$query = mysql_query('SELECT lvl, dscr
FROM ctg');
//echo mysql_num_rows($query) . '<hr/>';
$itr = 0;
while ($row = mysql_fetch_row($query)) {
list_print($row[0], $row[1]);// формирование меню
}
list_print(-1); // завершение меню
?>
|
| |
|
|
|
|
|
|
|
для: Visavi
(23.09.2009 в 14:20)
| |
$list[$row['forums_id'][] = $row['subforums'];
|
Но в таком виде он малополезен IMHO.
Я бы вытащил еще и subforums_id и написал
$list[$row['forums_id'][$row['subforums_id']] = $row['subforums_title'];
|
| |
|
|
|
|
|
|
|
для: heed
(23.09.2009 в 13:40)
| | на sql.ru мне посоветовали сделать что-то подобное
SELECT f1.*, f2.forums_title AS subforums FROM forums f1 LEFT JOIN forums f2 ON f2.forums_parent = f1.forums_id WHERE f1.forums_parent = 0 ORDER BY f1.forums_order ASC;
|
но если подфорума 2 или больше, то как все занести в массив или выводить из базы | |
|
|
|
|