|
|
|
| Уважаемые знатоки форума,
Все, после нескольких бессонных ночей за кодами мозг отказывается варить. Помогите пожалуйста.
Имеются две таблицы --
Таблица категорий 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 названий из обеих категорий.
Как можно составить запрос, чтобы вышел нужный результат?
Заранее СПАСИБО за понимание и помощь! | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: OLi
(31.08.2013 в 01:45)
| | OLi, нужно вывести все заметки, принадлежащие к той же категории, что и та, что на странице без названия категорий. Попробовал LEFT JOIN, не работает.
WHERE cats.cat = posts.cat_id
|
Т.к. в таблице cats у меня нет поля cat, заменил поочередно на id и на title - не помогло.
Но Спасибо за совет! | |
|
|
|
|
|
|
|
для: newstarter
(31.08.2013 в 01:38)
| | А можно кусочек дампа увидеть, что у вас хранится в cat_id таблицы posts? | |
|
|
|
|
|
|
|
для: 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 ;
|
| |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|
|
|
|
для: Valick
(31.08.2013 в 11:12)
| | Valick, да, int, но и без кавычек не сработало(( Спасибо за совет! | |
|
|
|
|
|
|
|
для: newstarter
(31.08.2013 в 01:38)
| | Уважаемый умельцы форума, будут ли какие-нибудь советы, исправления? Потому что проблема остается открытой. По-прежнему не могу сообразить, почему на этот запрос выводятся заметки по обеим категориям. Советовали LEFT JOIN, но кажется, это совсем не то. У меня же в таблице posts есть поле cat_id (int).
Буду признателен за любую помощь. СПАСИБО! | |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: 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 - названий других заметок из той же категории. А о чем вам говорит то, что вывел ваш код? | |
|
|
|
|
|
|
|
для: newstarter
(05.09.2013 в 13:37)
| | На странице каторы у тебя идет запрос к бд пиши
<?php
echo '<pre>';
print_r($_GET);
echo '</pre>';
?>
|
и резултат покажи | |
|
|
|
|
|
|
|
для: Jovidon
(05.09.2013 в 16:24)
| | Jovidon, результат такой:
Array
(
[id] => 9
) | |
|
|
|
|
|
|
|
для: newstarter
(05.09.2013 в 16:57)
| | где cat_id?
<a href="file.php?cat_id=чтото&id=чтото">ссылка</a>
|
| |
|
|
|
|
|
|
|
для: 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>';
?>
|
? Не совсем представляю | |
|
|
|
|
|
|
|
для: 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($reuslt, MYSQL_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($result, MYSQL_ASSOC))
{
// read.php?post_id= .... тоже также
}
}
else echo 'В таблице статьи нет записи';
?>
|
| |
|
|
|
|
|
|
|
для: Jovidon
(05.09.2013 в 20:00)
| | Jovidon, первый код для категорий вывел названия обеих категорий на экран, супер.
А вот со вторым (для заметок) пишет "В таблице статьи нет записи"...
Что это может означать? И что за переменная $posts? | |
|
|
|
|
|
|
|
для: newstarter
(05.09.2013 в 21:19)
| | >что за переменная $posts?
Можно понемнят на $row но вообщета имю таблицу вставить лучще будеть.
>А вот со вторым (для заметок) пишет "В таблице статьи нет записи"...
>Что это может означать?
А может быть таблица пусто. | |
|
|
|
|
|
|
|
для: Jovidon
(06.09.2013 в 08:58)
| | Нет, Jovidon, таблица полна заметок. | |
|
|
|
|
|
|
|
для: newstarter
(07.09.2013 в 00:48)
| | дамп таблици posts покажите | |
|
|
|
|
|
|
|
для: newstarter
(07.09.2013 в 00:48)
| | запрос ничего не находит
попробуйте добавить
else echo 'В таблице статьи нет записи'.(int)$_GET['cat_id'] ;
|
покажет чему равна (int)$_GET['cat_id'] в данном случае | |
|
|
|