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 :: Вывести строку один раз

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Agrail
Отправлено: 01 Апреля, 2011 - 18:47:06
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Всем привет.
Имеется проблема с выводом информации из mysql.
В таблице 4 колонки: ID, Avtor, Nazvanie, Text.При этом колонка Avtor имеет повторяющиеся значения.
задача - вывести информацию на страницу, но так, чтобы Nazvanit и Text выводились столько раз, сколько есть в БД, а Avtor выводился только один раз.

Вот код вывода:

$q = mysql_query("SELECT * FROM Stihi");
for ($i=0;$i<mysql_num_rows($q);$i++) {
$f = mysql_fetch_array($q);
echo "<h2>$f[Avtor]</h2>";
echo "<h3>$f[Nazvanie]</h3>";
echo "<p> $f[Text_S] </p>";
}
 
 Top
Саныч
Отправлено: 01 Апреля, 2011 - 19:20:01
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




SELECT DISTINCT


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Agrail
Отправлено: 01 Апреля, 2011 - 19:51:47
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




пробовал, конечно.
не выходит.там проблемы со счетчиком получаются
 
 Top
Champion Супермодератор
Отправлено: 01 Апреля, 2011 - 19:56:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




иф предыдущий автор не равен текущему, то вывести текущего автора, увеличить счетчик.
Изначально предыдущий автор равен пусть будет -986757.

А можно GROUP_CONCAT
 
 Top
Agrail
Отправлено: 01 Апреля, 2011 - 20:02:24
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




Champion, это очень хорошая мысль.
Я целый день бьюсь над тем, как реализовать команду "предыдуший автор = текущему".
Можете дать более развернутый совет?
 
 Top
Champion Супермодератор
Отправлено: 01 Апреля, 2011 - 20:07:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Agrail пишет:
Я целый день бьюсь над тем, как реализовать команду "предыдуший автор = текущему".
Можно сравнить предыдущего автора с текущим, используя замечательный оператор === и if. А предыдущего автора каждый раз перезапоминать в переменную.
 
 Top
Agrail
Отправлено: 01 Апреля, 2011 - 21:31:01
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2011  


Помог: 0 раз(а)




GROUP_CONCAT не подходит к сожалению (там ограничение на окличество символов).
а вот как инициализировать переменную с ифом в упор не понимаю (именно как это технически сделать).не дадите образец кода?

(Отредактировано автором: 02 Апреля, 2011 - 00:03:46)

 
 Top
Skit
Отправлено: 02 Апреля, 2011 - 07:03:32
Post Id



Новичок


Покинул форум
Сообщений всего: 18
Дата рег-ции: Март 2011  
Откуда: Siberia


Помог: 0 раз(а)




Как это должно выглядеть в итоговом HTML?
Автор Пушкин
Стихи
Стихи
Стихи
....
Автор Тургенев
Стихи
Стихи
Стихи
...
Или иначе?

А можно:
1. Сделать запрос, выбрать уникальные значения по полю с авторами.
2. Сделать второй запрос и выводит по авторам.
Получаем первого автора, печатаем его.
Получаем все строки с этим автором, печатаем, кончились?
Печатаем следующего автора и так далее.

или
достаем все записи. Создаем массив такого типа.
$autor['значение из БД']['счетчик'] = array(''name' => $из БД, text' => $из БД);
создаем первый массив с автором, далее условие, если автор совпадает, добавить в массив автора, с увеличением счетчика, если нет, создать новый массив другого автора и так со всеми данными. По задумке, на выходе должен получиться массив:
массив(
Автор(
0(
название
тектс
)
1(
название
тектс
)
автор2(
...
)
)
Потом foreach сделает нужный вывод. Сортировать можно функциями, для сортировки массива, + как достаем из БД, так и будет формироваться массив.

(Отредактировано автором: 02 Апреля, 2011 - 07:37:05)



-----
Человек способен на все.
Пока не начнет это делать.
Лакшми Нараяна прабху
 
 Top
Agrail
Отправлено: 02 Апреля, 2011 - 10:33:24
Post Id


Новичок


Покинул форум
Сообщений всего: 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>";
}
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB