ФорумПрограммированиеPHP для идиотов → Форум: вывод разделов и топиков

Форум: вывод разделов и топиков

  • Nox

    Сообщения: 204 Репутация: N Группа: Кто попало

    Spritz 7 сентября 2010 г. 13:31

    Пишу мини форум, задача вывести ресзделы, а внизу топики (на одной странице)


    /**
    * Вывод разделов
    */

    $sql = mysql_query("SELECT * FROM cat ORDER BY id");

    while($mas = mysql_fetch_array($sql)) {

    $Smas[] = $mas;

    }


    $smarty->assign('cats',$Smas);


    отправил разделы) но нужно вывести топики, которые по иду привязаны к разделам



    CREATE TABLE IF NOT EXISTS `cat` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` text,
    `des` text,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;



    CREATE TABLE IF NOT EXISTS `topic` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `cat_id` int,
    `name` text,
    `des` text,
    PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;



    Все омрачает то, что вывод там на смарти через foreach / я никогда такое не писал, а вот щас туплю)) как быть не подскажете?
  • technobulka

    Сообщения: 4552 Репутация: N Группа: Джедаи

    Spritz 7 сентября 2010 г. 13:38, спустя 6 минут 18 секунд

    SELECT `cat`.`name`, `cat`.`des`, `topic`.`name`, `topic`.`des` 
    FROM `cat`
    INNER JOIN `topic`
    ON `topic`.`cat_id`=`cat`.`id`
    ORDER BY `cat`.`id`

    кажись так))
    Высокоуровневое абстрактное говно
  • Nox

    Сообщения: 204 Репутация: N Группа: Кто попало

    Spritz 7 сентября 2010 г. 13:44, спустя 6 минут 55 секунд


    SELECT `cat`.`name`, `cat`.`des`, `topic`.`name`, `topic`.`des` 
    FROM `cat`
    INNER JOIN `topic`
    ON `topic`.`cat_id`=`cat`.`id`
    ORDER BY `cat`.`id`

    кажись так))
    жойны 0_о никогда не юзал. Пойду переваривать.
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 7 сентября 2010 г. 15:46, спустя 2 часа 1 минуту 59 секунд

    Nox, жойны говно. Собирай список айдишников разделов. И потом делай запрос через WHERE razdel_id IN (1,2,4,5,7,8). И ты получишт список всех топиков. Потом выводи. И почитай блог васяца на эту тему там про кеширование интересно написано.
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 7 сентября 2010 г. 15:50, спустя 3 минуты 44 секунды

    ГОффект на пiха.ру {+++58+++} имхо, если человек не знает про джойны, то про мемкэш лучше уж помолчать, не забивайте людям голову {+++26+++} советчики, блин))
  • Nox

    Сообщения: 204 Репутация: N Группа: Кто попало

    Spritz 7 сентября 2010 г. 16:13, спустя 23 минуты 1 секунду


    Nox, жойны говно. Собирай список айдишников разделов. И потом делай запрос через WHERE razdel_id IN (1,2,4,5,7,8). И ты получишт список всех топиков. Потом выводи. И почитай блог васяца на эту тему там про кеширование интересно написано.
    запрос в цикле что ли делать? Мне понравились эти жойны, но чет массив на выходе крывой получается. Или запрос тугой, или я {+++74+++}

    SELECT `cat`.`name`, `cat`.`des`, `topic`.`name`, `topic`.`des` 
    FROM `cat`
    INNER JOIN `topic`
    ON `topic`.`cat_id`=`cat`.`id`
    ORDER BY `cat`.`id`

    кажись так))
    а что вернет эта шняга? Тоесть что по идде она должна вернуть?
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 7 сентября 2010 г. 16:14, спустя 35 секунд

    все нормально. В одном разделе несколько топиков, поэтому после джоина он немного странно выглядит. Тебе нужно руками преобразовать этот массив к удобному виду.
  • VaseninM

    Сообщения: 2417 Репутация: N Группа: Адекваты

    Spritz 7 сентября 2010 г. 16:19, спустя 5 минут 32 секунды

    ГОффект на пiха.ру

    это не ГОэффект. Он просто своим постом сказал то, что я не говорил, потому что думал, что мну засрут. Ну тока он это все ахуенно написал и добавил туда мемкеш)))
  • technobulka

    Сообщения: 4552 Репутация: N Группа: Джедаи

    Spritz 7 сентября 2010 г. 16:59, спустя 39 минут 42 секунды

    чет я не в теме))
    Высокоуровневое абстрактное говно
  • Nox

    Сообщения: 204 Репутация: N Группа: Кто попало

    Spritz 8 сентября 2010 г. 6:56, спустя 13 часов 56 минут 43 секунды

    я так понял он выводит только результат у которого есть совпадение в обеих таблицах


    $sql = mysql_query("SELECT * FROM cat
    INNER JOIN topic
    ON cat.id = topic.cat_id");

    while($mas = mysql_fetch_array($sql)) {

    print_r($mas);
    }


    тоесть
    Array ( [0] => 2 [id] => 1 [1] => Раздел 2 [name] => topic 1 [2] => описание раздела 2 [des] => первая тема [3] => 1 [4] => 2 [cat_id] => 2 [5] => topic 1 [6] => первая тема )

    а таблица такая

    INSERT INTO `cat` (`id`, `name`, `des`) VALUES
    (1, 'Раздел 1', 'описание раздела 1'),
    (2, 'Раздел 2', 'описание раздела 2');

    тоесть он берет раздел 2 у которого есть топик, а раздел 1 он не достает
  • mario

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 8 сентября 2010 г. 7:03, спустя 7 минут 16 секунд

    OFFTOPIC:
    $sql = mysql_query("SELECT * FROM cat
                       INNER JOIN topic
                       ON cat.id = topic.cat_id");

    LIMIT поставь ))){+++56+++}
    я так понял он выводит только результат у которого есть совпадение в обеих таблицах

    нет, он просто включает (join) одну таблицу в другую. И на выходе ты получаешь данные как-будто из одной таблицы
  • Nox

    Сообщения: 204 Репутация: N Группа: Кто попало

    Spritz 8 сентября 2010 г. 7:05, спустя 2 минуты 11 секунд


    OFFTOPIC:
    $sql = mysql_query("SELECT * FROM cat
                       INNER JOIN topic
                       ON cat.id = topic.cat_id");

    LIMIT поставь ))){+++56+++}
    я так понял он выводит только результат у которого есть совпадение в обеих таблицах

    нет, он просто включает (join) одну таблицу в другую. И на выходе ты получаешь данные как-будто из одной таблицы
    хм ну почему только 1 раздел в массиве , хотя в таблице их 2? И как потом его обработать…
  • technobulka

    Сообщения: 4552 Репутация: N Группа: Джедаи

    Spritz 8 сентября 2010 г. 7:13, спустя 8 минут 17 секунд

    хм ну почему только 1 раздел в массиве , хотя в таблице их 2

    покажи, что у тебя после запроса в пхп
    Высокоуровневое абстрактное говно
  • mario

    Сообщения: ? Репутация: N Группа: Джедаи

    Spritz 8 сентября 2010 г. 7:16, спустя 2 минуты 13 секунд

    хм ну почему только 1 раздел в массиве , хотя в таблице их 2? И как потом его обработать…

    сорь, не заметил что
    INNER JOIN

    читай тут http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 8 сентября 2010 г. 7:19, спустя 2 минуты 54 секунды

    то же самое но по-русски http://kreker.org/items/5

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