|
|
|
| Делаю доску объявлений и столкнулся с такой проблемой, не получается вывести 10 последних объявлений с сортировкой в определенном порядке. Помогите пожалуйста решить. Заранее благодарен.
Вот код которым пытаюсь сделать вывод:
$col_news=10;
$rime = mysql_query("SELECT * from category WHERE id_parent = '{$_GET["cat"]}'") or die(mysql_error());
while($row = mysql_fetch_array($rime)) {
$rime2 = mysql_query("SELECT * from category WHERE id_parent = '{$row["id"]}'") or die(mysql_error());
while($row2 = mysql_fetch_array($rime2)) {
if ($_SESSION['city'] != "all") $chcyt="AND city_ob = '{$_SESSION['city']}'";
$rimebaza = mysql_query("SELECT * from baza WHERE id_cat = '{$row2["id"]}' $chcyt AND status_ob = 'yes' ORDER BY -poziciya_ob, id_ob LIMIT $col_news") or die(mysql_error());
while($rowbaza = mysql_fetch_array($rimebaza)) {
extract($rowbaza);
echo "$zagol_ob<br>$text_ob";
}
}
}
|
Структура таблицы категорий:
CREATE TABLE IF NOT EXISTS `category` (
`id` int(8) NOT NULL auto_increment,
`name_cat` tinytext NOT NULL,
`opisanie` tinytext NOT NULL,
`hide` enum('show','hide') NOT NULL default 'show',
`id_parent` int(8) NOT NULL default '0',
`image` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id_parent` (`id_parent`),
FULLTEXT KEY `opisanie` (`opisanie`),
FULLTEXT KEY `name_cat` (`name_cat`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=436 ;
|
Структура таблицы объявлений:
CREATE TABLE IF NOT EXISTS `baza` (
`id_ob` int(11) NOT NULL auto_increment,
`id_cat` varchar(20) NOT NULL default '',
`zagol_ob` varchar(255) NOT NULL default '',
`text_ob` text NOT NULL,
`cena` varchar(255) NOT NULL default '',
`date_ob` date NOT NULL default '0000-00-00',
`date_ob_exp` char(3) NOT NULL default '',
`name_poster` varchar(200) NOT NULL default '',
`contact_poster` varchar(255) NOT NULL default '',
`adress_poster` varchar(255) NOT NULL default '',
`city_ob` varchar(255) NOT NULL default '',
`ip_ob` varchar(20) NOT NULL default '',
`email_ob` varchar(255) NOT NULL default '',
`url_ob` varchar(255) NOT NULL default '',
`icq` varchar(255) NOT NULL default '',
`pass_ob` varchar(255) NOT NULL default '',
`status_ob` char(3) NOT NULL default 'no',
`poziciya_ob` char(3) NOT NULL default '0',
PRIMARY KEY (`id_ob`),
FULLTEXT KEY `text_ob` (`text_ob`),
FULLTEXT KEY `zagol_ob` (`zagol_ob`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=50 ;
|
| |
|
|
|
|
|
|
|
для: Ruthless
(30.06.2008 в 10:20)
| |
SELECT * from category WHERE id_parent = '{$_GET["cat"]}' ORDER BY id DESC LIMIT 10
|
Такой запрос будет выдергивать последние 10 записей | |
|
|
|
|
|
|
|
для: Antohins
(30.06.2008 в 17:13)
| | Почему то выдергивает 11 записей и сортировка по poziciya_ob, id_ob не работает
Видать из-за того что организованно 3 цикла... А вот как это реализовать по другому? | |
|
|
|
|
|
|
|
для: Ruthless
(30.06.2008 в 17:37)
| | А зачем там 3 цикла?
Как связаны эти 2 таблицы? | |
|
|
|
|
|
|
|
для: Эй
(30.06.2008 в 18:45)
| |
$col_news=10;
//Этим циклом я вычисляю к какой категории принадлежит объявление
$rime = mysql_query("SELECT * from category WHERE id_parent = '{$_GET["cat"]}'") or die(mysql_error());
while($row = mysql_fetch_array($rime)) {
//Этим циклом я вычисляю к какой подкатегории принадлежит объявление
$rime2 = mysql_query("SELECT * from category WHERE id_parent = '{$row["id"]}'") or die(mysql_error());
while($row2 = mysql_fetch_array($rime2)) {
if ($_SESSION['city'] != "all") $chcyt="AND city_ob = '{$_SESSION['city']}'";
//Этим циклом я вычисляю к какой подподкатегории принадлежит объявление
// Потому что у меня в таблице объявлений значится только ID номер подподкатегории
$rimebaza = mysql_query("SELECT * from baza WHERE id_cat = '{$row2["id"]}' $chcyt AND status_ob = 'yes' ORDER BY -poziciya_ob, id_ob LIMIT $col_news") or die(mysql_error());
while($rowbaza = mysql_fetch_array($rimebaza)) {
extract($rowbaza);
echo "$zagol_ob<br>$text_ob";
}
}
}
|
Спасибо за вашу помощь | |
|
|
|
|
|
|
|
для: Ruthless
(30.06.2008 в 10:20)
| | Если проблема у Вас именно в том, что не получается взять 10 последних (по первичному ключу) записей в порядке, отличном от порядка первичного ключа (id) , то её можно решить так:
а) Взять 10 последних id
SELECT id FROM tbl WHERE .... ORDER BY id LIMIT 10
б) взять записи с id из полученного списка
SELECT * FROM tbl WHERE id IN ($list) ORDER BY order_field
Только у меня подозрение, что проблема не в этом... | |
|
|
|
|
|
|
|
для: Trianon
(30.06.2008 в 19:41)
| | К сожалению мне нужно еще это все и отсортировать | |
|
|
|