| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Составление SQL-запросов > mysql: некорректно выбирает запись |
| Автор: Risyaalex 13.1.2011, 19:20 | ||
| столкнулась с таким вопросом - таблица foto id ........ rating ....... lider мне нужно выбрать строку с максимальным значением столбца rating и записать '1' в столбец lider этой строки делаю такой запрос:
в localhost все отрабатывает отлично, выбирает как и положено. выложила на хостинг - выбирает строку какую сам захочет, даже логику выбора проследить не могу... |
| Автор: triclosan 13.1.2011, 19:30 |
| 1 |
| Автор: Deniz 14.1.2011, 08:46 | ||
Можно добавить id в order by
|
| Автор: Akina 14.1.2011, 08:46 |
| А какой смысл тащить ID изменяемой записи на клиента, когда его можно получить непосредственно при апдейте? Само собой, влоб это не получится - нужно создать вьюв, возвращающий нужный ID, и джойнить его в условиях отбора. |
| Автор: Zloxa 14.1.2011, 08:54 | ||||||
не совсем понял. разве так нельзя?
Добавлено через 2 минуты и 6 секунд или тогда уж ваще, вместо всех трех
|
| Автор: Akina 14.1.2011, 09:02 |
В MySQL (а речь именно о нём) - увы, он не позволяет использовать в подзапросе изменяемую таблицу. И использование промежуточной вьюшки - именно способ обхода этого ограничения. |
| Автор: Zloxa 14.1.2011, 09:04 |
| Akina, понял, спасибо. |
| Автор: Risyaalex 14.1.2011, 09:56 | ||
нет, записи все разные... |
| Автор: Frees 14.1.2011, 10:16 |
а рейтинг у них тоже разный? |
| Автор: Risyaalex 14.1.2011, 11:19 |
Да, я специально уже все просмотрела. все записи разные и рейтинг нигде не повторяется - и самое главное на локалхосте все работает отлично, проверяла много раз. то же самое выкладываю на хостинг - и не работает... |
| Автор: Frees 14.1.2011, 11:40 |
| может на живом сервере лидер часто меняется ? Добавлено через 44 секунды база и сами данные идентичны серверной? |
| Автор: Risyaalex 14.1.2011, 12:44 |
нет, этот скрипт я пока тестирую, запускаю вручную ( из 5 фото с разным рейтингом - выбрать с наибольшим) - он вообще будет запускаться кроном раз в месяц да - просто дамп базы сделала и все |
| Автор: Akina 14.1.2011, 12:51 | ||
В смысле при выполнении второго запроса возвращается не id записи с макс. рейтингом, а произвольный id (строка 6)? А сколько записей при этом возвращается? точно одна-единственная? |
| Автор: Risyaalex 14.1.2011, 13:26 | ||
возвращается одна запись - пока в таблице ничего не меняется возвращается одна и таже (например id 59 - хотя по рейтингу она например четвертая из пяти), добавляю или удаляю фото, или меняю значение рейтинга - и возвращается другая запись, тоже не понятно по какому параметру отобранная |
| Автор: Risyaalex 14.1.2011, 14:17 |
| данные таблицы id image view rating q_vote lider 1 20111401130206.jpg 6 4 2 0 2 20111401130213.jpg 4 7 2 1 3 20111401130220.jpg 8 10 3 0 4 20111401130228.jpg 10 16 4 0 5 20111401130234.jpg 16 18 4 0 на данный момент выбирает id 2 |
| Автор: Zloxa 14.1.2011, 14:18 |
| rating - не строка ли? |
| Автор: Frees 14.1.2011, 14:21 | ||
|
| Автор: Risyaalex 14.1.2011, 14:28 | ||
не работает |
| Автор: Frees 14.1.2011, 14:32 |
В смысле не работает. ошибка в запросе? |
| Автор: Risyaalex 14.1.2011, 14:38 |
$sql111=mysql_query("SELECT `id` FROM `foto` ORDER BY cast(`rating` as integer) DESC LIMIT 1"); if ($sql111 == true) echo "1"; else echo "2"; результат - 2 |
| Автор: Risyaalex 16.1.2011, 14:32 |
| пробовала сортировать по разным столбцам, нашла закономерность - если сортирую по убыванию рейтинга строки id rating получается id rating 1 - 4 1 - 4 2 - 35 2 - 35 3 - 10 5 - 23 5 - 23 3 - 10 и по другим столбцам то же самое, то есть он "4" воспринимает как "40" или сортирует по первым цифрам суммы.... |
| Автор: Zloxa 16.1.2011, 15:03 |
| Risyaalex, у вас определенно рейтинг- строка и сортируется соответственно как строка а не как целое. Добавлено через 1 минуту и 18 секунд а cast может не отрабатывать в том числе и потому, что находятся записи, которые невозможно преобразовать из строки в целое. |
| Автор: Risyaalex 16.1.2011, 15:05 |
| я разобралась!!! у меня rating был varchar поменяла на INT и все стало на свои места всем спасибо! |