Упреждающее чтение из mysql_query

Illusive

Guest
Упреждающее чтение из mysql_query

Добрый день. :)
Такой вот вопрос возник.
Есть база такого, примерно, вида:

заголовок1|новость1
заголовок1|новость2
заголовок2|новость1
заголовок3|новость1
заголовок3|новость2

Есть код :
PHP:
$pg_name="";
$result=mysql_query("SELECT * FROM local_news")
        or die("Could not connect: " . mysql_error());

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
        	{if ($pg_name<>$row['g_name']):
                echo "<tr>..некий заголовок..</tr>";
	                $pg_name=$row['g_name'];                        
           endif;             
echo "<tr>...тело новости...</tr>";
echo "* * *<br>";
          }
На выходе получается нечто типа

ЗАГОЛОВОК 1
новость 1
* * *
новость 2
* * *
ЗАГОЛОВОК 2
новость
* * *

Надо как-то считывать из $result следующую строку. чтобы определять, что идет в следующей строке - новость под текущим заголовком, или же будет новый раздел идти.
Чтобы эти "* * *" ставить только между новостями.
Либо, надо как-то
выполнять $row = mysql_fetch_array($result, MYSQL_ASSOC)
а потом откатывать счетчик в на одну позицию назад...

Можно, конечно, сделать иначе - создать отдельный справочник заголовков и в самой базе новостей выставлять только их коды. Потом в цикле перебрать заголовки и, если запрос в базе новостей по коду текущего заголовка чего-то возвращает, выподить новости.
Но это ж гемор. Куча лишних запросов к базе, снижение скорости вывода. :rolleyes:
 

tony2001

TeaM PHPClub
сначала вынь все в один массив, а потом уже выводи и смотри в массиве.
 

Фанат

oncle terrible
Команда форума
у тебя проблемы с русским языком?
заголовком новости ты называешь рубрику?
в этом случаеЮ. разделение рубрик и новостей не "гемор", а единственно правильное решение.
а
Куча лишних запросов к базе, снижение скорости вывода
- неумение писать программы
 

neko

tеam neko
как вариант можно вообще вывесити эти 3 точки не после новости, а вместе с заголовком.
 

_RVK_

Новичок
Illusive не "спасибо", а сделай 2 таблицы. Про нормализацию баз слышал? Вот в твоем случае она не нормализована. Переделывай структуру.
 

Illusive

Guest
Автор оригинала: neko
как вариант можно вообще вывесити эти 3 точки не после новости, а вместе с заголовком.
Не получится
ТОгда будем иметь такую ерунду
ЗАГОЛОВОК 1
* * *
новость 1
новость 2
новость 3
....
 

Фанат

oncle terrible
Команда форума
чваку незнаком оператор else :)
и не пугайте его словом "нормализация"
 

Illusive

Guest
Автор оригинала: Diesel
не "спасибо", а сделай 2 таблицы. Про нормализацию баз слышал? Вот в твоем случае она не нормализована. Переделывай структуру.
Таблиц и так две.
В $result попадают уже объединенные данные таблиц, связанные по коду заголовка.
Не вижу причин работать в двумя таблицами и плодить кучу селектов. С массивом одним - быстрее должно быть.
Запрос на самом деле несколько сложнее - я просто не хотел захламлять пост лишней инфой, не относящейся непостредственно к вопросу.
 

SiMM

Новичок
Illusive, где там куча? Приведи формат таблиц и нормально опиши что ты хочешь - наверняка можно обойтись максимум двумя запросами.
 

_RVK_

Новичок
Illusive Ты думаешь 2 запроса SELECT будут работатьмедленее чем один твой, но с объединением двух таблиц? сильно сомневаюсь!
 

Фанат

oncle terrible
Команда форума
$pg_name='';
PHP:
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
  if ($pg_name and $pg_name==$row['g_name']) {
    echo "* * *<br>"; 
  } else {
    echo "<tr>..некий заголовок..</tr>"; 
    $pg_name=$row['g_name'];
  }
echo "<tr>...тело новости...</tr>"; 
}
 

Illusive

Guest
Автор оригинала: SiMM
Illusive, где там куча? Приведи формат таблиц и нормально опиши что ты хочешь - наверняка можно обойтись максимум двумя запросами.
Таблицы такие.
title_table
g_id INT(2)
g_title CHAR(100)

news_table
g_id INT(2)
news TEXT

Получить надо такое

ЗАГОЛОВОК1
новость1
* * *
новость2
* * *
новость3
ЗАГОЛОВОК2
новость1
ЗАГОЛОВОК3
новость1
* * *
новость2

Звездочки - для более наглядного разделения новостей в одном разделе. Я цветами выделил каждую новость, при помощи $i%2, но между ними разделитель визуальный нужен еще.
 

SiMM

Новичок
Что-то я не вижу в таблицах намёка на связь между заголовками и новостями (разве что title_table.g_id=news_table.g_id), или все новости надо разместить под всеми заголовками?
 

Illusive

Guest
Фанат О, а так еще проще. :)
Пасиб за мысль! ;)
 

Фанат

oncle terrible
Команда форума
это не мысль.
это элементарный алгоритм, который способные восьмиклассники в школе состаляют.

если понимают, как работает их программа.
 

Illusive

Guest
Автор оригинала: Фанат
это не мысль.
это элементарный алгоритм, который способные восьмиклассники в школе состаляют.
если понимают, как работает их программа.
Только можно еще проще сделать. Вместо двух проверок - одну.

PHP:
$pg_name='';

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
  if ($pg_name<>$row['g_name']) { 
    echo "<tr>..некий заголовок..</tr>"; 
    $pg_name=$row['g_name'];     
   }
  else { 
     echo "* * *<br>";     
  } 
}
-~{}~ 21.05.04 12:06:

SiMM
Спасиб, все. :) Я разобрался уже с проблемой. :)
 
Сверху