PHP цикл без повторов

12
Павел Кирхмаер
На сайте с 21.06.2008
Offline
86
1606

Здравствуйте !

Помогите реализовать цикл, do while ... чтобы например:

Есть 3 автора ... когда я добавляю в базу книгу первого автора, затем 2 книги 2-ого автора...

Как сделать, чтобы цикл вывел только имена 2-х авторов у которых произошло обновление ?

S
На сайте с 10.08.2006
Offline
115
#1
botaniQQQ:
Здравствуйте !

Помогите реализовать цикл, do while ... чтобы например:
Есть 3 автора ... когда я добавляю в базу книгу первого автора, затем 2 книги 2-ого автора...

Как сделать, чтобы цикл вывел только имена 2-х авторов у которых произошло обновление ?

не совсем ясно, что есть "после обновления". до обновления у для авторов не были добавлены книги? или "после обновления" - книги добавлены недавно.

в первом случае можно завести в базе поле-флаг и менять его при добавлении книги. во втором случае, с датой играть. и тут скорее while, чем do while

malls
На сайте с 08.08.2005
Offline
255
#2
Shadow:
не совсем ясно, что есть "после обновления". до обновления...

Я бы еще спросил что есть "добавляю в базу" и что есть "база"...

Если речь о мускуле, то очевидно что в базе должно быть:

autor/book/add_date

тогда while тут совсем ни при чем... Просто:

SELECT autor FROM table WHERE add_date='чему угодно' GROUP BY autor

запрос сам выберет только авторов.

надо просто поколдовать с этим самым "чему угодно"

[Удален]
#3
botaniQQQ:
Здравствуйте !

Помогите реализовать цикл, do while ... чтобы например:
Есть 3 автора ... когда я добавляю в базу книгу первого автора, затем 2 книги 2-ого автора...

Как сделать, чтобы цикл вывел только имена 2-х авторов у которых произошло обновление ?

цикл можно прервать в любое время по любому условию командой break;

C
На сайте с 26.12.2005
Offline
146
#4

Откуда данные берутся?

MySQL или другие способы хранения информации?

Лучший хостинг, которым пользовался за последние 15 лет! (https://beget.com/p107248)
Павел Кирхмаер
На сайте с 21.06.2008
Offline
86
#5

Я заношу двоим авторам в базу MySQL: первому 1 книгу, а второму две книги ... если я выведу в цикле

$result = mysql_query("SELECT id_author FROM book ORDER BY id_book DESC LIMIT 6",$db);
$myrow = mysql_fetch_array($result);

В таков случае выведутся 3 имени ... одно имя автора у которого 1 книга и два раза имя второго автора у которого 2 книги.

Мне же нужно, чтобы неким образом вывелось только 2 имени авторов у которых произошло обновление в книгографии. Это возможно ?

bezludny
На сайте с 04.03.2009
Offline
42
#6

Думаю, в Вашем случае речь идет об агрегирующих функциях...

$result = mysql_query("SELECT id_author, count(id_book) FROM book GROUP BY id_book",$db);

$myrow = mysql_fetch_array($result);

Результатом запроса будут уникальные id авторов и количество книг, относящимся к ним.

Есть другой путь, но уродский в данном случае. Есть оператор DISTINCT. Он исключает повторения.

$result = mysql_query("SELECT DISTINCT id_author FROM book ORDER BY id_book DESC LIMIT 6",$db);

$myrow = mysql_fetch_array($result);

В этом случае из базы возьмутся по одному разу все авторы. Но, ИМХО, первый сбособ более правильный.

malls
На сайте с 08.08.2005
Offline
255
#7
botaniQQQ:
Я заношу двоим авторам в базу MySQL: первому 1 книгу, а второму две книги ... если я выведу в цикле
$result = mysql_query("SELECT id_author FROM book ORDER BY id_book DESC LIMIT 6",$db);
$myrow = mysql_fetch_array($result);


В таков случае выведутся 3 имени ... одно имя автора у которого 1 книга и два раза имя второго автора у которого 2 книги.

Мне же нужно, чтобы неким образом вывелось только 2 имени авторов у которых произошло обновление в книгографии. Это возможно ?

Потому что Вам НУЖНА!!! Группировка по авторам (их id) что непонятно то? Тогда и выводится будут только два.

bezludny
На сайте с 04.03.2009
Offline
42
#8

$result = mysql_query("SELECT id_author, count(id_book) FROM book GROUP BY id_autor",$db);

$myrow = mysql_fetch_array($result);.

Облажался, спасибо malls, я нашел ошибку у себя.

Павел Кирхмаер
На сайте с 21.06.2008
Offline
86
#9
bezludny:
$result = mysql_query("SELECT id_author, count(id_book) FROM book GROUP BY id_autor",$db);
$myrow = mysql_fetch_array($result);.

Мне нужно не сортировка по id авторов, а именно обновления чтобы выводились, но без повторов !

C
На сайте с 28.08.2007
Offline
68
#10
botaniQQQ:
Мне нужно не сортировка по id авторов, а именно обновления чтобы выводились, но без повторов !

Это не сортировка, а группировка, она это и сделает. Или что должно выводится без повторов?

ClickFrog.ru - система защиты от скликивания контекстной рекламы (http://clickfrog.ru/?page=registration&referrer_id=708)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий