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

Форум MySQL

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

 

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

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

тема: Вывод из базы заметок по из нужной категории
 
 автор: newstarter   (31.08.2013 в 01:38)   письмо автору
 
 

Уважаемые знатоки форума,

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

Имеются две таблицы --

Таблица категорий cats с id и title (категории всего две)
Таблица заметок posts с id, cat_id и title

Нужно было составить запрос к базе так, чтобы на странице заметки выводились названия 5 заметок из той же категории (если заметка принадлежит к категории 1, то 5 названий из категории 1, а если заметка из категории 2, то 5 названий из категории 2).

Имеется также мой вариант запроса:

$result2 = mysql_query("SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5",$db);


Но он не работает так, как нужно - выводит 5 названий из обеих категорий.

Как можно составить запрос, чтобы вышел нужный результат?

Заранее СПАСИБО за понимание и помощь!

  Ответить  
 
 автор: OLi   (31.08.2013 в 01:45)   письмо автору
 
   для: newstarter   (31.08.2013 в 01:38)
 

Как я понимаю, нужно вывести все заметки и название категорий к которым они принадлежат - то обычный LEFT JOIN.

Можно попробовать так:
SELECT * FROM cats LEFT JOIN posts WHERE cats.cat = posts.cat_id GROUP BY cats.id LIMIT 5

  Ответить  
 
 автор: newstarter   (01.09.2013 в 01:34)   письмо автору
 
   для: OLi   (31.08.2013 в 01:45)
 

OLi, нужно вывести все заметки, принадлежащие к той же категории, что и та, что на странице без названия категорий. Попробовал LEFT JOIN, не работает.

WHERE cats.cat = posts.cat_id


Т.к. в таблице cats у меня нет поля cat, заменил поочередно на id и на title - не помогло.

Но Спасибо за совет!

  Ответить  
 
 автор: cheops   (31.08.2013 в 08:25)   письмо автору
 
   для: newstarter   (31.08.2013 в 01:38)
 

А можно кусочек дампа увидеть, что у вас хранится в cat_id таблицы posts?

  Ответить  
 
 автор: newstarter   (01.09.2013 в 01:35)   письмо автору
 
   для: cheops   (31.08.2013 в 08:25)
 

Cheops, вот часть дампа таблицы cats -

CREATE TABLE IF NOT EXISTS `cats` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=4 ;

  Ответить  
 
 автор: Valick   (31.08.2013 в 11:12)   письмо автору
 
   для: newstarter   (31.08.2013 в 01:38)
 

если cat_id у вас тип int то кавычки не нужны
$result2 = mysql_query("SELECT * FROM posts WHERE cat_id=$cat ORDER BY date DESC, id DESC LIMIT 5",$db);

  Ответить  
 
 автор: newstarter   (01.09.2013 в 01:36)   письмо автору
 
   для: Valick   (31.08.2013 в 11:12)
 

Valick, да, int, но и без кавычек не сработало(( Спасибо за совет!

  Ответить  
 
 автор: newstarter   (03.09.2013 в 22:54)   письмо автору
 
   для: newstarter   (31.08.2013 в 01:38)
 

Уважаемый умельцы форума, будут ли какие-нибудь советы, исправления? Потому что проблема остается открытой. По-прежнему не могу сообразить, почему на этот запрос выводятся заметки по обеим категориям. Советовали LEFT JOIN, но кажется, это совсем не то. У меня же в таблице posts есть поле cat_id (int).

Буду признателен за любую помощь. СПАСИБО!

  Ответить  
 
 автор: Sfinks   (05.09.2013 в 08:53)   письмо автору
 
   для: newstarter   (03.09.2013 в 22:54)
 

Для начала стоит проверить, что на самом деле в запросе. Перепишите так:
$query = "SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5";
echo $query;
$result2 = mysql_query($query,$db);
Скорее всего проблема в значении переменной $cat.

  Ответить  
 
 автор: newstarter   (05.09.2013 в 13:37)   письмо автору
 
   для: Sfinks   (05.09.2013 в 08:53)
 

>Для начала стоит проверить, что на самом деле в запросе. Перепишите так:
>
$query = "SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5";
>echo $query;
>$result2 = mysql_query($query,$db);
Скорее всего проблема в значении переменной $cat.

Sfinks, выводит следующее:

SELECT * FROM posts WHERE cat_id='1' ORDER BY date DESC, id DESC LIMIT 5

Не совсем понимаю, что это означает. Подставился номер первой категории.

А переменная $cat описана у меня выше вот так:

if (isset ($_GET['id'])) {$id = $_GET['id'];}

if (isset($_GET['cat_id'])) {$cat = $_GET['cat_id']; }
if (!isset ($cat)) {$cat = 1;}

/* Проверяем, является ли переменная числом */
if (!preg_match("|^[\d]+$|", $cat)) {
exit ("<p>Неверный формат запроса! Проверьте URL!");
}


$id здесь нужно для вывода заметки, а $cat - названий других заметок из той же категории. А о чем вам говорит то, что вывел ваш код?

  Ответить  
 
 автор: Jovidon   (05.09.2013 в 16:24)   письмо автору
 
   для: newstarter   (05.09.2013 в 13:37)
 

На странице каторы у тебя идет запрос к бд пиши
<?php
    
echo '<pre>';
        
print_r($_GET);
    echo 
'</pre>';
?>

и резултат покажи

  Ответить  
 
 автор: newstarter   (05.09.2013 в 16:57)   письмо автору
 
   для: Jovidon   (05.09.2013 в 16:24)
 

Jovidon, результат такой:

Array
(
[id] => 9
)

  Ответить  
 
 автор: Jovidon   (05.09.2013 в 17:10)   письмо автору
 
   для: newstarter   (05.09.2013 в 16:57)
 

где cat_id?
<a href="file.php?cat_id=чтото&id=чтото">ссылка</a>

  Ответить  
 
 автор: newstarter   (05.09.2013 в 18:25)   письмо автору
 
   для: Jovidon   (05.09.2013 в 17:10)
 

Jovidon, у меня там после запроса код такой -

<?php
$result2 
mysql_query("SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5",$db);
    if (
mysql_num_rows($result2) > 0)
    
{
    
$myrow2 mysql_fetch_array($result2);
    
    do
    {
    
printf ("<p><a href='/post/%s'>%s</a></p>"$myrow2["id"], $myrow2["title"]);
    
    }
    while (
$myrow2 mysql_fetch_array($result2));
        
}

?>


Где именно нужно прописать
<?php
    
echo '<pre>';
        
print_r($_GET);
    echo 
'</pre>';
?> 


? Не совсем представляю

  Ответить  
 
 автор: Jovidon   (05.09.2013 в 20:00)   письмо автору
 
   для: newstarter   (05.09.2013 в 18:25)
 

файл категории
<?php
    $query 
"SELECT id, title 
              FROM cats"
;
    
$result mysql_query($query);
    if(!
$result) exit("Несмог выбарт категории: " mysql_error());
    if(
mysql_num_rows($result) > 0){
        while(
$cat mysql_fetch_array($reusltMYSQL_ASSOC))
        {
            echo 
'<a href="post.php?cat_id='.(int)$cat['id'].'">'.htmlspecialchars($cat['title'], ENT_QUOTES).'</a><br>';
        }
    }
    else echo 
'В таблице катерогии нет записи';
?>




файл статьи
<?php
    $query 
"SELECT * 
              FROM posts 
              WHERE cat_id = " 
. (int)$_GET['cat_id'] . "
              ORDER BY date 
              LIMIT 0, 5"
;
    
$result mysql_query($query);
    if(!
$result) exit("Несмог выбарт статьи по этому категорию: " mysql_error());
    if(
mysql_num_rows($result) > 0){
        while(
$posts mysql_fetch_array($resultMYSQL_ASSOC))
        {
            
// read.php?post_id= .... тоже также
        
}
    }
    else echo 
'В таблице статьи нет записи';
?>

  Ответить  
 
 автор: newstarter   (05.09.2013 в 21:19)   письмо автору
 
   для: Jovidon   (05.09.2013 в 20:00)
 

Jovidon, первый код для категорий вывел названия обеих категорий на экран, супер.

А вот со вторым (для заметок) пишет "В таблице статьи нет записи"...

Что это может означать? И что за переменная $posts?

  Ответить  
 
 автор: Jovidon   (06.09.2013 в 08:58)   письмо автору
 
   для: newstarter   (05.09.2013 в 21:19)
 

>что за переменная $posts?
Можно понемнят на $row но вообщета имю таблицу вставить лучще будеть.
>А вот со вторым (для заметок) пишет "В таблице статьи нет записи"...
>Что это может означать?
А может быть таблица пусто.

  Ответить  
 
 автор: newstarter   (07.09.2013 в 00:48)   письмо автору
 
   для: Jovidon   (06.09.2013 в 08:58)
 

Нет, Jovidon, таблица полна заметок.

  Ответить  
 
 автор: Jovidon   (07.09.2013 в 15:45)   письмо автору
 
   для: newstarter   (07.09.2013 в 00:48)
 

дамп таблици posts покажите

  Ответить  
 
 автор: btr   (07.09.2013 в 18:26)   письмо автору
 
   для: newstarter   (07.09.2013 в 00:48)
 

запрос ничего не находит

попробуйте добавить

else echo 'В таблице статьи нет записи'.(int)$_GET['cat_id'] ;


покажет чему равна (int)$_GET['cat_id'] в данном случае

  Ответить  
Rambler's Top100
вверх

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