Я пытаюсь выбрать три случайные строки из таблицы, где их объединенный столбец item_price
меньше желаемой суммы.MySQL Выберите 3 случайные строки, где сумма трех строк меньше значения
Представьте, что у вас есть <input>
за сумму в долларах. Когда вы вводите сумму в долларах, база данных возвращает три случайных элемента, где их комбинированная цена меньше или равна сумме доллара, которую вы вводите.
Если я ввожу 300 долларов США, вы можете купить эти три предмета: 150 долларов, 100 долларов США и 50 долларов США. Мне трудно создать запрос, который будет возвращать три элемента, отвечающие этим критериям.
SELECT t1.item_id, t1.item_price
FROM items t1
INNER JOIN items t2 ON (t1.item_id = t2.item_id)
GROUP BY t1.item_id, t1.item_name, t1.item_price
HAVING SUM(t2.item_price) <=300
ORDER BY RAND()
LIMIT 3
Я думал, что это сработает, но я думаю, что это было просто совпадение, когда это произошло. Кажется, он просто возвращает все три предмета, цены которых меньше 300 долларов США, а не всего менее 300 долларов.
Я также попробовал этот запрос:
SELECT t1.item_id, t1.item_price
FROM items t1
JOIN items t2 ON t2.item_id <= t1.item_id
WHERE t2.item_price <= 500
GROUP BY t1.item_id
HAVING SUM(t2.item_price) <= 500
ORDER BY RAND()
LIMIT 3
Опять же, казалось, работать сначала, но потом начали возвращаться пункты за $ 2000.
Если в PHP есть лучший (даже жертвующий производительность) способ, я не против. Я просто не думал, что запрос будет таким сложным.
Как всегда, благодарите любого за помощь.
Как близко вы хотите, чтобы общее количество трех предметов находилось до введенной суммы? Например, если вы введете сумму в 300 и 150 долларов, то это полезно? –
@BitwiseCreative: Как я себе это представлял, если бы у меня был предел в 300 долларов, теоретически он мог бы вернуть 30 долларов США, если каждый из них составляет 10 долларов. Я бы не стал против этого, особенно если это проще. Я думаю, что практически, приблизиться к пределу было бы полезно, но это было не мое первоначальное намерение. Во-вторых, я не возражаю против возвращения 1 предмета за полные 300 долларов. Спасибо за вопрос. – dcclassics
@BitwiseCreative Кроме того, я добавлю, что, вероятно, не будет много предметов стоимостью 10 долларов.Было бы проще не устанавливать ограничение на предмет, а вместо этого давать мне неопределенное количество случайных строк, если оно ниже предела? – dcclassics