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

Форум MySQL

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

 

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

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

тема: Проблема с доской объявлений
 
 автор: Ruthless   (30.06.2008 в 10:20)   письмо автору
 
 

Делаю доску объявлений и столкнулся с такой проблемой, не получается вывести 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 ;

   
 
 автор: Antohins   (30.06.2008 в 17:13)   письмо автору
 
   для: Ruthless   (30.06.2008 в 10:20)
 

SELECT * from category WHERE id_parent = '{$_GET["cat"]}' ORDER BY id DESC LIMIT 10


Такой запрос будет выдергивать последние 10 записей

   
 
 автор: Ruthless   (30.06.2008 в 17:37)   письмо автору
 
   для: Antohins   (30.06.2008 в 17:13)
 

Почему то выдергивает 11 записей и сортировка по poziciya_ob, id_ob не работает
Видать из-за того что организованно 3 цикла... А вот как это реализовать по другому?

   
 
 автор: Эй   (30.06.2008 в 18:45)   письмо автору
 
   для: Ruthless   (30.06.2008 в 17:37)
 

А зачем там 3 цикла?

Как связаны эти 2 таблицы?

   
 
 автор: Ruthless   (02.07.2008 в 09:50)   письмо автору
 
   для: Эй   (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"; 


}


Спасибо за вашу помощь

   
 
 автор: Trianon   (30.06.2008 в 19:41)   письмо автору
 
   для: 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

Только у меня подозрение, что проблема не в этом...

   
 
 автор: Ruthless   (02.07.2008 в 09:52)   письмо автору
 
   для: Trianon   (30.06.2008 в 19:41)
 

К сожалению мне нужно еще это все и отсортировать

   
Rambler's Top100
вверх

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