Доброго всем времени суток! столкнулся с такой проблемой при сортировке запроса MySQL: Вот сам запрос, который корректно работает и выводит результаты с сортировкой по полю count PHP: <? $sql = $db->query("SELECT * FROM banners WHERE status = '1' ORDER BY count ASC LIMIT 1"); $item = $db->fetchrow($sql); echo $item['id']; ?> Далее, ставим условие и если оно выполняется, прибавляем +1 в count PHP: <? if($item['user_group'] == 1) { $db->query("UPDATE banners SET count=count+1 WHERE id='" . intval($item['id']) . "'"); echo $item['id']; } ?> Ну а далее сама проблема: Обновили мы все записи попадающие под условие и увеличили значение count на 1. Далее запрос направил нас на запись (при помощи сортировки) не попадающее под наше условие, у которой значение поля count меньше на 1 чем у все остальных. Соответственно эта запись не будет обновлена и выводиться больше ничего не будет. Каким образом можно решить эту проблему???
Можно поподробнее с этого момента? Как направил? И непрозрачна сама проблема. Можно вкратце сказать - что делается и что именно не работает?
в запрос попадают все записи у которых status=1, а лимит=1 выводит нам поочереди по одной записи. Далее есть условие, которое из тех записей выдаст только записи у которых user_group=1, и только у этих записей будет обновлено поле count по которому и есть сортировка. Следовательно у записей user_group не равных 1, счетчик не будет обновлен и вывод не продолжится.
я правильно понял, что ты впихал в цикл select по одной строке и update по одной строке? А точно нельзя PHP: <? $db->query("UPDATE banners SET count=count+1 WHERE [b]status = 1 AND user_group = 1[/b]); ?
karakh Silicium Вы прежде чем писать пробовали правильно прочитать о чем я написал???? покажу пример на пальцах: есть таблица с полями id | status | user_group | count 1 1 1 1 2 1 1 1 3 1 2 1 Есть запрос PHP: <? $sql = $db->query("SELECT * FROM banners WHERE status = '1' ORDER BY count ASC LIMIT 1"); $item = $db->fetchrow($sql); echo $item['id']; ?> Который будет доставать по одной записи и сортировать по полю count. А также есть условие и запрос, который будет увеличивать поочередно (если выполняется условие) при выводе новой записи count на 1 PHP: <? if($item['user_group'] == 1) { $db->query("UPDATE banners SET count=count+1 WHERE id='" . intval($item['id']) . "'"); echo $item['id']; } ?> Т.е. если мы уже показали 2 записи попадающих под все уловия, то получим в базе следующее: id | status | user_group | count 1 1 1 2 2 1 1 2 3 1 2 1 А 3 запись выводиться не будет, т.к. под условия в select она попадает, но не попадает под условие if($item['user_group'] == 1), а следовательно у этой записи count никогда не будет увеличен, а уже из этого следует, что у первых 2 записей (из-за сортировки по count) поле count обновлено тоже не будет, и больше ничего не будет на этом месте отображаться... Так вот как мне можно этого избежать???
Логично что убрать то условие, которое мешает. Сам поставил условие, сам его и убери. В чем вопрос-то? Или это топик из разряда детских шуток? вида - "отсоси не нагибаясь"?
Мда. Так он у тебя и делается только если выполняется условие Проблема в чем? И, да, из этого вовсе не следует это Это, кстати, о птичках
не дождавшись помощи решил проблему сам... а вы так и не поняли что мне нужно было и почему не работало... хотя все очень просто!
Simpliest задачки то и небыло... можно было посмотреть на 2 запроса и понять что делает каждый из них... А если логика не развита, то и не объяснишь