Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2011, 11:48   #1
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию Архив новостей. Вывод титла новостей по категориям.

Здравствуйте,
создаю новостной архив. Наткнулся на проблему, мне собственно алгоритм нужен.
Использую значит 2 таблицы.
1)Таблица category
PHP код:
      SELECT idname_$lncolor FROM category WHERE parent // тут все верно, выдет следующее:
      
+----+--------------+--------+
      | 
id name_ru      color  |
      +----+--------------+--------+
      |  
Политика     d61d00 |
      |  
Экономика    8f1ab6 |
      |  
Спорт        0061a6 |
      |  
Культура     d1008b |
      |  
Происшествие 008000 |
      +----+--------------+--------+ 
2)Таблица news
PHP код:
      SELECT category.name_$lnnews.titlenews.categorycolorparent
      FROM news
      JOIN category ON category
.id news.category
      WHERE date 
'".$date."'
      
AND language $lang
      LIMIT 0
200
      
+----------------+------------------------------------------------------------------------------------+----------+--------+--------+
      | 
name_ru        title                                                                              category color  parent |
      +----------------+------------------------------------------------------------------------------------+----------+--------+--------+
      | 
Политика       ггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггггг            |        d61d00 |      |
      | 
Россия         ззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззззз              |       14 8c1300 |      |
      | 
Происшествие   рррррррррррррррррррррррррррррррррррррррррррррррррррррр                             |        f00    |      |
      | 
Политика       мммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммммм       |        d61d00 |      |
      | 
Кино           тттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттттт               |       35 005400 |      |
      | 
Спорт          сссссссссссссссссссссссссссссссссссссссссссссссссссссссссс                         |        d1008b |      |
      | 
Кредит         уууууууууууууууууууууууууууууууууууууууууууууууууу                                 |       27 004678 |      |
      ... 
В последней таблице, те у которых parent = 0 это основные категории. А остальные суб-категории.
Надо чтобы выводились основные категории, и под каждой категорией титлы новостей и при этом титлы суб-категорий чтоб тоже присутствовали соответственно. Я делаю так:
PHP код:
$res_cat_name=mysql_query("SELECT id, name_$ln, color FROM category WHERE parent = 0");
       
      
$res_news mysql_query("SELECT category.name_$ln, news.title, news.category, color, parent
      FROM news
      JOIN category ON category.id = news.category
      WHERE date = '"
.$date."'
      AND language = 
$lang
      LIMIT 0, 200
      "
);
       
                        
$catid = -1;
                     while(
$news mysql_fetch_array($res_news))
                     {
                        
$cat mysql_fetch_array($res_cat_name);
                        if (
$news["parent"] != 0)
                        {
                           
$catid $news["parent"];
                        } else
                         {
                           
$catid $news["category"];
                         }
                         if (!isset(
$news[$catid]))
                         {
                           
$news = array();
                         } else
                         {
                           echo 
$news[$catid]; echo "<p>";
                         }
                     } 
Но не совсем получается. Помогите пож-та, предложите алгоритм, а то никак не могу понять как сделать.
Gauss вне форума Ответить с цитированием
Старый 05.03.2011, 17:51   #2
StagnantIce
Пользователь
 
Регистрация: 05.03.2011
Сообщений: 60
По умолчанию

Предлагаю сначала вынуть все данные, запихать их в массив, а потом вывести. Вложенность я так понял может быть любая?
Мои статьи по веб-программированию http://pihpi.ru
StagnantIce вне форума Ответить с цитированием
Старый 06.03.2011, 11:15   #3
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Цитата:
Сообщение от StagnantIce Посмотреть сообщение
Предлагаю сначала вынуть все данные, запихать их в массив, а потом вывести. Вложенность я так понял может быть любая?
Да, и я собираюсь делать именно так. Вложенность любая, будет зависеть от того сколько было новостей на тот или иной день. Просто проблемы с тем как их запихать в массив. У меня получается что я беру id всех новостей в переменной $catid. Потом не могу придумать что делать дальше.
Gauss вне форума Ответить с цитированием
Старый 07.03.2011, 14:26   #4
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Люди, я в пхп не так уж силён. Помогите пож-та.
Например есть массивы
Код:
a = array(1=>"10", 2=>"20", 3=>"30", 4=>"40");
b = array(1=>"100", 2=>"200", 3=>"300", 4=>"400");
мне надо сделать так, чтобы получить следующий вывод
Код:
10
100
----
20
200
----
30
300
----
40
400
Подскажите пож-та как такое сделать.
Gauss вне форума Ответить с цитированием
Старый 07.03.2011, 19:32   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Люди, я в пхп не так уж силён.
Ну циклы осилить-то можно...?
PHP код:
$a = array(1=>"10"2=>"20"3=>"30"4=>"40");
$b = array(1=>"100"2=>"200"3=>"300"4=>"400");
$count = (count($a) == count($b)) ? count($a) : '';
// вывод только при равном кол-ве элементов в обоих массивах
if (!empty($count)) {
    for (
$i 1$i <= $count$i++) { 
        echo 
$a[$i], '<br/>'$b[$i], '<br/>----<br/>';
    }

Andkorol вне форума Ответить с цитированием
Старый 08.03.2011, 14:04   #6
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Andkorol Понятно, спасибо. Но я забыл написать, можно сделать без использования
Код:
for
. Это я знаю. Это я к вышеописанной задаче просто свожу.
Gauss вне форума Ответить с цитированием
Старый 08.03.2011, 14:17   #7
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Andkorol Понятно, спасибо. Но я забыл написать, можно сделать без использования for. Это я знаю. Это я к вышеописанной задаче просто свожу.
Вы в состоянии внятно описать, на каком именно этапе вы сейчас находитесь, и в чём конкретно у вас проблема..?

Что вы там "забыли написать" и к чему вы всё сводите - никто здесь не будет гадать....

Хотите корректный ответ - задавайте корректный вопрос.
Andkorol вне форума Ответить с цитированием
Старый 08.03.2011, 14:25   #8
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Ок.
Извиняюсь за некорректность.
Делаю ньюс-архив для новостного сайта. Застрял на следующем, не получается вывести последовательно названия категорий и под ними относящиеся к ним титлы новостей.
Мне в помощь, сказали что нужно создать массив индексом которого будут id категорий, а значениями новости. Вот не могу это реализовать.((
Gauss вне форума Ответить с цитированием
Старый 08.03.2011, 14:49   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Gauss Посмотреть сообщение
Застрял на следующем, не получается вывести последовательно названия категорий и под ними относящиеся к ним титлы новостей.
Мне в помощь, сказали что нужно создать массив индексом которого будут id категорий, а значениями новости. Вот не могу это реализовать.((
PHP код:
$categories = array(
    
'id_1' => 'Category 1',
    
'id_2' => 'Category 2',
    
'id_3' => 'Category 3',
    
'id_4' => 'Category 4',
    
'id_5' => 'Category 5'
);
$news = array(
    
'id_1' => array('news_title_1''news_title_2''news_title_3''news_title_4'),
    
'id_2' => array('news_title_1'),
    
'id_3' => array('news_title_1''news_title_2''news_title_3'),
    
'id_4' => array('news_title_1''news_title_2'),
    
'id_5' => array('news_title_1''news_title_2''news_title_3'),
);
if(!empty(
$categories)){
    foreach(
$categories as $key => $category){
        echo 
$category'<br/>';
        if(!empty(
$news[$key]) && is_array($news[$key])){
            foreach(
$news[$key] as $news_title){
                echo 
' -- '$news_title'<br/>';
            }
        }
        echo 
'<br/>';
    }

Ключи id_1(2,3,4,5) - это будут ID ваших категорий.

Это можно также реализовать в одном массиве, просто пример с двумя массивами - проще и понятнее.
Andkorol вне форума Ответить с цитированием
Старый 08.03.2011, 15:09   #10
Gauss
Форумчанин
 
Аватар для Gauss
 
Регистрация: 26.11.2007
Сообщений: 235
По умолчанию

Andkorol
огромное тебе спасибо друг! Буду разбирать ща.
Я про foreach прочитал, но но так и не понял, здесь
foreach($categories as $key => $category)
$categories----это созданный массив.
А те два параметра $key и $category это в смысле новые созданные переменные?
Gauss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль новостей в Joomla Валисий WordPress и другие CMS 3 12.02.2011 21:37
Генератор новостей. Baltimor Свободное общение 1 20.07.2010 01:51
Вывод новостей в GridView Faridik Общие вопросы .NET 1 23.05.2010 20:54
Лидеры добавления новостей Vladya HTML и CSS 1 08.09.2009 13:25