За последние 24 часа нас посетили 11544 программиста и 719 роботов. Сейчас ищет 251 программист ...

Вывод из базы заметок из нужной категории

Тема в разделе "PHP и базы данных", создана пользователем newstarter, 31 авг 2013.

  1. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Уважаемые знатоки форума,

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

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

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

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

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

    Код (Text):
    1. $result2 = mysql_query("SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5",$db);
    Но он не работает так, как нужно - выводит 5 названий из обеих категорий.

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

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

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    не может быть =) этот запрос выводит только при точном совпадении категории
     
  3. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Честное пионерское, не работает. Пробовал LEFT JOIN, вообще ничего не выводит. Проблема остается открытой(
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    чувак, чувак. спакуха. у тебя категория прописана в таблице с постами. нафига тебе джоины?

    Добавлено спустя 38 секунд:
    наверное в темноте писькой можно нащупать, ага? :D
     
  5. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Так я знаю, что прописана, просто выводятся названия заметок по обеим категориям. Может все же в запросе что-то не то? Никаких ошибок не видите?

    А нужно-то названия по какой-то одной, к которой относится та, что на странице уже.
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    по каким блин обеим, если у вас там ОДНО значение? :D

    Добавлено спустя 35 секунд:
    дык вы выводите запрос на экран перед посылкой в бд. много нового узнаете.

    Добавлено спустя 20 секунд:
    а потом его копируете и в пма вставляете и еще больше узнаете! :D
     
  7. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Рад, что вам весело, спорить не собираюсь, суть проблемы описал еще в первом сообщении здесь. Если у вас все, прошу сюда больше не писать. Кто знает и умеет, тот помогает, а не умничает зря.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    ебать

    Ты знаешь что такое пма?
    ты понял, что я тебе сказал сделать?

    Если нет - задай вопрос. Обижаться в детском саду надо было.
     
  9. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.776
    Симпатии:
    1.158
    Адрес:
    там-сям
    Игорь прав, чо :D
    Автор, либо ты не ту страницу/не те строки правишь, либо одно из двух.
     
  10. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Я не просил меня грузить непонятными сокращениями. Хочешь помочь, объясняй толково, без плоских шуток и школьных смайлов. Гугл на пма выдает технические аббревиатуры. Форумы не для одних просветленных, нужно и это понимать.
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    да я откуда знаю, понятные они или нет.

    phpmyadmin - обычно есть на любом хостинге.
     
  12. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    phpmyadmin - Под этим именем я это, конечно, знаю. А как понять, вставить туда запрос?
     
  13. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    ну заходишь в базу, и там вкладку SQL тыкаешь и вставляешь
     
  14. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Я вставил код, phpmyadmin выдал мне такое:

    Ошибка
    SQL-запрос:

    $result2 = mysql_query(

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



    Ответ MySQL:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$result2 = mysql_query("SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DE' at line 1

    Выходит, все же что-то не так в запросе?
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    чувак, чувак. Туда вставлять SQL =)
     
  16. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    OK, вставил
    Код (Text):
    1. SELECT * FROM posts WHERE cat_id='$cat'
    Вышло такое:
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    нене
    $cat это ж из похапе!
     
  18. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Игорь, я загрузил запрос SELECT from 'posts' WHERE cat_id=1 и SELECT from 'posts' WHERE cat_id=2, phpmyadmin показал заметки сначала по первой категории, потом по второй. Кстати зачем это нужно было сделать? Что должен был показать pma?
     
  19. Roman_che

    Roman_che Новичок

    С нами с:
    3 сен 2013
    Сообщения:
    13
    Симпатии:
    0
    newstarter, пиши так:
    Код (Text):
    1. $sql = 'SELECT * FROM posts WHERE cat_id='.$cat.' LIMIT 5'; // Запрос на вывод 5ти значений из таблицы posts, где cat_id = $cat
    2. $result2 = mysql_query($sql, $db);
     
  20. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Roman_che, Спасибо, но не поверите. Выводит заметки по обеим категориям, и все тут. В таблице в поле cat_id стоят два разных значения, а выводит и из первой, и из второй. Что же это такое, где ошибка?

    Может в самом верхнем коде создается конфликтующий запрос? Так у меня в самом верху для вывода самой заметки на страницу. Замысел такой был: заметка, а под ней - список из 5 названий из той же категории:
    Код (Text):
    1. <?php
    2. include ("blocks/bd.php");
    3.  
    4. if (isset ($_GET['id'])) {$id = $_GET['id'];}
    5.  
    6. if (isset($_GET['cat_id'])) {$cat = $_GET['cat_id']; }
    7. if (!isset ($cat)) {$cat = 1;}
    8.  
    9. if (!preg_match("|^[\d]+$|", $cat)) {
    10. exit ("<p>Неверный формат запроса! Проверьте URL!");
    11. }
    12.  
    13. $result = mysql_query("SELECT * FROM posts WHERE id='$id'",$db);
    14.  
    15. $myrow = mysql_fetch_array($result);
    16.  
    17. ?>
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    То, что я прав, и грабли где-то в коде, а запрос работает именно так, как я писал - выводит гарантированно только одну категорию и никак иначе.

    Добавлено спустя 1 минуту 19 секунд:
    я ж те грю, глянь запрос-то.
    завардампи текущий массив и т.п.
     
  22. newstarter

    newstarter Активный пользователь

    С нами с:
    3 сен 2012
    Сообщения:
    51
    Симпатии:
    0
    Игорь, Спасибо за совет, но завардампи - это кто? Можно наглядно, как Roman_che?
     
  23. Roman_che

    Roman_che Новичок

    С нами с:
    3 сен 2013
    Сообщения:
    13
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. include ("blocks/bd.php");
    3. if (isset ($_GET['id'])) {$id = $_GET['id'];}
    4.  
    5. if (isset($_GET['cat_id']) && intval($_GET['cat_id'])) {$cat = intval($_GET['cat_id']); }
    6. else{$cat = 1;}
    7. $sql = 'SELECT * FROM posts WHERE id='.$id;
    8. // получаем значение из таблицы POSTS
    9. if(!@extract(mysql_fetch_array(mysql_query($sql)))) {
    10.     // нет нужной строчки в таблице posts
    11.     exit('<p>Ничего не найдено...</p>');
    12. }
    13.  
    14. // теперь нужный id у нас в переменной соответсвующей названию поля
    15. // проверяем правильность
    16. echo '__________________________';
    17. echo "id = ".$id.'';
    18. echo "cat_id  = ".$cat_id ; // искомая величина
    19. echo "title  = ".$title ;
    20. echo '__________________________';
    21.  
    22. $sql = 'SELECT * FROM posts WHERE cat_id='.$cat_id.' LIMIT 5'; // Запрос на вывод 5ти значений из таблицы posts, где cat_id = $cat
    23. $result2 = mysql_query($sql, $db);
    24. echo 'Искомые строчки:';
    25. while ($row = mysql_fetch_array($result2)){
    26.     extract($row);
    27.     echo 'id = '.$id;
    28.     echo 'cat_id = '.$cat_id;
    29.     echo 'title = '.$title;
    30. }
    31. ?>
    что выводит?
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.415
    Симпатии:
    1.767
    меняем на
    Код (PHP):
    1. $query = "SELECT * FROM posts WHERE cat_id='$cat' ORDER BY date DESC, id DESC LIMIT 5";
    2. echo "<br>ВОТ ЗАПРОС [[$query]]<br>";
    3. $result2 = mysql_query($query,$db);
    4. var_dump($result2);
    5.  
     
  25. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    10.776
    Симпатии:
    1.158
    Адрес:
    там-сям
    фетча не хватает