Помогите Доделать запрос MySql
есть
mysql_query("SELECT * FROM `mg_user` ORDER BY RAND() LIMIT 1 ")
как сделать, чтоб выводило одну случайную строку, где поле `balans` минимальное
Есть несколько минимальных балансов?
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Навскидку. Можно вложенным запросом c лимитом. Если конечно я задачу правильно понял.
SELECT `mu`.* FROM (SELECT * FROM `mg_user` ORDER BY `balans` ASC LIMIT 10) AS `mu` ORDER BY RAND() LIMIT 1
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Игорь_Vasinsky
2.11.2012 - 16:06
крутяк
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (T1grOK @ 2.11.2012 - 09:17) |
Есть несколько минимальных балансов? |
Это не известно! Они каждый день меняются, может быть и несколько одинаковых.
Решение постом моим выше.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOKНу мне не совсем это надо было =)
Вот я Примерно нужный мне запрос составил:
SELECT * FROM `mg_user`
WHERE
`referals1` = 'onelogin' and
`oplata_data` > '0'
ORDER BY `ref1` ASC LIMIT 1
Только мне вот надо, чтоб как то проверяло, если есть несколько минимальных одинаковых
ref1, то должно проверять
ref2 и т.д. пока не выберет одно.
Имеются
ref1- ref10
Есть 2 варианта решения
1) Правильно спроектировать БД
2) Писать процедуру.
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
НУ может кто что подскажет?
Думаю сделать как-то так:
$act_min_sql = mysql_query("SELECT `id`, MIN(`ref1`) FROM `mg_user`
WHERE
`referals1` = 'onelogin' and
`oplata_data` > '0'
");
if (mysql_num_rows($act_min_sql) > 1)
{
$act_min_sql = mysql_query("SELECT `id`, MIN(`ref2`) FROM `mg_user`
WHERE
`referals1` = 'onelogin' and
`oplata_data` > '0'
");
}
Т.е. сначала выбираем все минимальные
`ref1`, если находит больше одной, то делаем запрос на
`ref2` и т.д. (Сделаю через цикл)
Или может как-то по другому можно?
olgatcpip
7.11.2012 - 12:49
что-то я не поняла к чему столько сложностей :blink:
Такой вариант тебе не подойдет?
mysql_query("SELECT * FROM `mg_user` ORDER BY balans asc, RAND() LIMIT 1 ")
Здесь сперва отсортируются по значению balans и с одинаковым балансом в случайном порядке
Тут важно знать
balans - не должен быть null
результат какждый раз разный :)
_____________
Ласковое слово и кошке приятно... Плюсик в карму сойдет wink.gif
*smarty дока - новая любовь
Моё рукотворение ругайте, хвалите smile.gif
Веду маленький
блогв этом блоге публикую новые работы
WMR217126627282 wink.gif
Цитата (olgatcpip @ 7.11.2012 - 08:49) |
что-то я не поняла к чему столько сложностей :blink: Такой вариант тебе не подойдет?
mysql_query("SELECT * FROM `mg_user` ORDER BY balans asc, RAND() LIMIT 1 ") Здесь сперва отсортируются по значению balans и с одинаковым балансом в случайном порядке Тут важно знать balans - не должен быть null результат какждый раз разный :) |
Ты о чём? Вот что мне надо сделать
Цитата |
Вот я Примерно нужный мне запрос составил:
SELECT * FROM `mg_user` WHERE `referals1` = 'onelogin' and `oplata_data` > '0' ORDER BY `ref1` ASC LIMIT 1
Только мне вот надо, чтоб как то проверяло, если есть несколько минимальных одинаковых ref1, то должно проверять ref2 и т.д. пока не выберет одно.
Имеются ref1- ref10 |
Цитата |
если есть несколько минимальных одинаковых ref1, то должно проверять ref2 |
Сделай сортировку сразу по нескольким полям.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.