ФорумПрограммирование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

    Сообщения: 4540 Репутация: 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

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

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

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

    Сообщения: 7931 Репутация: 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`

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

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

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

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

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

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

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

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

    Сообщения: 4540 Репутация: 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

    Сообщения: 6067 Репутация: 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

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

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

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

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

    Сообщения: 6067 Репутация: 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
  • Абырвалг

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

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

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

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