Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Вывести строку один раз
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
Всем привет.
Имеется проблема с выводом информации из mysql.
В таблице 4 колонки: ID, Avtor, Nazvanie, Text.При этом колонка Avtor имеет повторяющиеся значения.
задача - вывести информацию на страницу, но так, чтобы Nazvanit и Text выводились столько раз, сколько есть в БД, а Avtor выводился только один раз.
Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010 Откуда: Украина, Запорожье
Помог: 62 раз(а)
SELECT DISTINCT
----- Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
Agrail
Отправлено: 01 Апреля, 2011 - 19:51:47
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
пробовал, конечно.
не выходит.там проблемы со счетчиком получаются
Champion
Отправлено: 01 Апреля, 2011 - 19:56:55
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
иф предыдущий автор не равен текущему, то вывести текущего автора, увеличить счетчик.
Изначально предыдущий автор равен пусть будет -986757.
А можно GROUP_CONCAT
Agrail
Отправлено: 01 Апреля, 2011 - 20:02:24
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
Champion, это очень хорошая мысль.
Я целый день бьюсь над тем, как реализовать команду "предыдуший автор = текущему".
Можете дать более развернутый совет?
Champion
Отправлено: 01 Апреля, 2011 - 20:07:39
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Agrail пишет:
Я целый день бьюсь над тем, как реализовать команду "предыдуший автор = текущему".
Можно сравнить предыдущего автора с текущим, используя замечательный оператор === и if. А предыдущего автора каждый раз перезапоминать в переменную.
Agrail
Отправлено: 01 Апреля, 2011 - 21:31:01
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
GROUP_CONCAT не подходит к сожалению (там ограничение на окличество символов).
а вот как инициализировать переменную с ифом в упор не понимаю (именно как это технически сделать).не дадите образец кода?
Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011 Откуда: Siberia
Помог: 0 раз(а)
Как это должно выглядеть в итоговом HTML?
Автор Пушкин
Стихи
Стихи
Стихи
....
Автор Тургенев
Стихи
Стихи
Стихи
...
Или иначе?
А можно:
1. Сделать запрос, выбрать уникальные значения по полю с авторами.
2. Сделать второй запрос и выводит по авторам.
Получаем первого автора, печатаем его.
Получаем все строки с этим автором, печатаем, кончились?
Печатаем следующего автора и так далее.
или
достаем все записи. Создаем массив такого типа.
$autor['значение из БД']['счетчик'] = array(''name' => $из БД, text' => $из БД);
создаем первый массив с автором, далее условие, если автор совпадает, добавить в массив автора, с увеличением счетчика, если нет, создать новый массив другого автора и так со всеми данными. По задумке, на выходе должен получиться массив:
массив(
Автор(
0(
название
тектс
)
1(
название
тектс
)
автор2(
...
)
)
Потом foreach сделает нужный вывод. Сортировать можно функциями, для сортировки массива, + как достаем из БД, так и будет формироваться массив.
----- Человек способен на все.
Пока не начнет это делать. Лакшми Нараяна прабху
Agrail
Отправлено: 02 Апреля, 2011 - 10:33:24
Новичок
Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011
Помог: 0 раз(а)
Skit, стихи надо действительно отобразить именно так, как ты понял.Вот попытался сделать через запрос к уникальным авотрам, получается не так как надо. вот так:
Пушкин
стих пушкина
Некрасов
стих пушкина
лермонтов
стих пушкина
набоков
стих некрасова
и.т.д.
(можно вот тут сразу посмотреть результат - http://kotjournal.net/proza_0.php)
Вот код:
$z = mysql_query("SELECT DISTINCT Avtor FROM proza");
$q = mysql_query("SELECT * FROM proza");
for ($i=0;$i<mysql_num_rows($q);$i++)
{
$f = mysql_fetch_array($q);
$a = mysql_fetch_array($z);
echo "<h2>$a[Avtor]</h2>";
echo "<h3>$f[Nazvanie]</h3>";
echo "<p> $f[Text_P] </p>";
}
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.