gpt4 book ai didi

mysql - 当总行数 < n 时取出 n 行

转载 作者:行者123 更新时间:2023-11-29 17:17:33 25 4
gpt4 key购买 nike

我有一张 table ,上面写着菜单。其中只有 5 条记录可用,但我需要 5 条以上的记录,包括重复记录。

实际场景,一群人可以点相同的菜单,例如如果我有

1)tea

->foo

->bar

2)coffee

->latte

->expresso

3)shake

两个或更多人可以点咖啡。

我尝试这样做

$menu = RestaurantsMenu::where('tag','=','Coffee')
->get()
->random(5);

菜单      标签      
菜单 1      鸡肉      
菜单 2      素食      
菜单 3      鸡肉      

正如你所看到的,我有两种鸡,如果我想随机取出4只鸡,包括重复的鸡,我该怎么做?请指教。

最佳答案

问题在撰写时已更新,我对问题的解释可能不正确 - 暂时保留

原解释:如果数据库中的行数少于X行,如何通过随机复制其他行来创建包含X个条目的结果集。

<小时/>

原始答案:

这种复制应该在您查询了已有的数据后仅使用 PHP 来完成。

我会使用一个函数来获取查询和所需的结果数量,然后从现有的行中随机创建足够的行。

function fillResultsWithDuplicates($query, $numRowsNeeded) {
// avoid querying _more_ than needed when you have sufficient
$res = $query->random($numRowsNeeded);

// may need to coerce into an array - not familiar with laravel
return fillArrayWithRandomDuplicates($res, $numRowsNeeded);
}

function fillArrayWithRandomDuplicates($vals, $numEntriesNeeded) {
/*im sure this can be written to be faster and more succinct
could accept an optional function to perform the filling*/
if (count($vals) >= $numEntriesNeeded) return $vals;
$numDuplicatesNeeded = $numEntriesNeeded - count($vals);
$dupes = [];

// Here your are pulling random values from your array to act as duplicates needed
for ($i = 0; $i < $numDuplicatesNeeded; $i++) {
$dupes[] = $vals[mt_rand(0, count($vals)-1)]; // array_rand could be used as well but may be slower
}

// Maybe shuffle as well if you need
return array_merge($dupes, $vals);
}

在您的案例中的用法

$menu = RestaurantsMenu::where('tag','=','Coffee')->get()
$filledMenu = fillResultsWithDuplicates($menu, 5);

使用简单数组的演示:

$initial = ["a", "b", "c"];
$filled = fillArrayWithRandomDuplicates($initial, 10);
// will contain 7 random selections of a,b,c followed by original a,b,c for total 10 entries
// ex: bcaaabaabc - add shuffles as needed

关于mysql - 当总行数 < n 时取出 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com