У меня есть таблица (MySql), где один столбец является «Значение» между -3 и 3. Что я пытаюсь сделать это:SQL, если случайный результат имеет значение меньше X, возвращает более случайные результаты до достижения значения X?
- Вытащите случайную строку из таблицы, если это " Значение "является положительным числом (от 1 до 3, в моем случае - отрицательные значения будут использоваться для чего-то еще и здесь не актуальны)
- Если« Значение »равно 3, отобразите только эту строку.
- Если «Значение» равно 2, отобразите эту строку плюс другую случайную строку со значением «Значение» 1.
- Если «Значение» равно 1, отобразите эту строку плюс одну еще строку с символом « «Значение» из 2 или 2 строк с «значением» 1.
Или, если это так, мне нужны строки, перечисленные до тех пор, пока общее их значение не будет 3 - выполнено ни одной строкой со значением 3, двумя строками со значениями 1 и 2 (или 2 и 1) или тремя строками со значением 1 каждый.
Вот что у меня есть:
$query = "SELECT * FROM $usertable WHERE Value>0 ORDER BY RAND() LIMIT 1"; //from all positive Values, get one at random
$query2 = "SELECT * FROM $usertable WHERE Value BETWEEN 1 AND 2 ORDER BY RAND() LIMIT 1"; //from all Values between 1 and 2, get one at random
$query3 = "SELECT * FROM $usertable WHERE Value=1 ORDER BY RAND() LIMIT 1"; //from all Values equal to 1, get one at random
$result = mysql_query($query);
$result2 = mysql_query($query2);
$result3 = mysql_query($query3);
while($row = mysql_fetch_array($result))
{
echo $row['A'] . " " . $row['B'] . " " . $row['C'] . " " . $row['Value'];
echo "<br>";
}
while($row['Value']<3)
{
while($row2 = mysql_fetch_array($result2))
{
echo $row2['A'] . " " . $row2['B'] . " " . $row2['C'] . " " . $row2['Value'];
echo "<br>";
}
}
while($row['Value'] + $row2['Value']<3)
{
while($row3 = mysql_fetch_array($result3))
{
echo $row3['A'] . " " . $row3['B'] . " " . $row3['C'] . " " . $row3['Value'];
echo "<br>";
}
}
Я пытался поставить заявления в то время как в различных порядках, и я получаю неожиданные ошибки T_WHILE.
Так я это прямо сейчас, то код будет работать и время с этой ошибкой: «Фатальная ошибка: Максимальное время выполнения 30 секунд превышен» И это не делать то, что мне это нужно, чтобы (это по-прежнему вытягивая результаты, если первое «значение» равно 3).
Может ли кто-нибудь указать, что я делаю неправильно? Должен быть лучший способ выполнить этот сценарий, чем то, что я делаю, но я просто не вижу его. Может ли кто-нибудь указать мне правильный путь? Благодаря!
Функции PHP, начинающиеся с 'mysql_', устарели от PHP 5.5.0. Если вы в состоянии сделать это, попробуйте обновить свой код, чтобы использовать [MySQLi] (http://www.php.net/manual/en/book.mysqli.php) или [PDO] (http://www.php.net/manual/en/ref.pdo-mysql.php). –
Я не эксперт по php, но как циклы 'while' должны заканчиваться? –
@ joe-frambach Спасибо за предложение, я сделаю обновления, как только я получу его для правильной работы (если только использование mysqli_ не исправит меня для меня!) – britne