Laravel Eloquent sortiert nach Datum und speichert Einträge auch nach Rangliste
P粉002023326
2023-08-30 14:46:23
<p>Ich erstelle ein Projekt mit Laravel und habe eine Tabelle mit allen meinen Produkten. In dieser Tabelle werden täglich Produkte hinzugefügt und ich zeige alle Produkte auf der Seite sortiert nach <code>created_at</code> an. Dies kann einfach mit Laravel Eloquent und <code>->orderBy('created_at', 'DESC')</code> durchgeführt werden. </p>
<p>Allerdings möchte ich die Möglichkeit haben, bestimmte Produkte an einen bestimmten Ort zu „pinnen“/zu „pinnen“. Dazu habe ich die Spalte <code>rank_index</code> erstellt, die die Nummer enthält, die das Produkt in der zurückgegebenen Abfragesammlung haben soll. </p>
<p>Das ist meine aktuelle Tabelle: </p>
<pre class="brush:php;toolbar:false;">title rank_index erstellt_at
Ein tolles Produkt 2023-01-01 10:04:00
Ein weiteres Produkt 4 2023-01-01 10:00:00
Babyauto 2023-01-01 10:05:00
Grüner Teppich 2 01.01.2023 10:08:00
Spielzeug 2023-01-01 10:07:00</pre>
<p>Die folgende Tabelle zeigt die Sammlung, die die Abfrage zurückgeben soll: </p>
<pre class="brush:php;toolbar:false;">title rank_index erstellt_at
Spielzeug 2023-01-01 10:07:00
Grüner Teppich 2 01.01.2023 10:08:00
Babyauto 2023-01-01 10:05:00
Ein weiteres Produkt 4 2023-01-01 10:00:00
Ein tolles Produkt 2023-01-01 10:04:00</pre>
<p>Ich hoffe, es gibt eine Lösung, um eine solche Tabelle direkt aus der Datenbank zurückzugeben. Auf diese Weise muss ich die Sammlung nicht aufteilen, was die Anfrage viel langsamer macht! Andernfalls muss ich PHP-Funktionen verwenden, um die Sammlung neu anzuordnen, aufzuteilen und aufzuteilen. </p>
<p>Ich würde mich über jede Hilfe freuen! </p>
<p>Mit freundlichen Grüßen</p>
我几乎肯定会选择银的解决方案
您的声明:
没有什么意义。将两个结果集拆分/切片/拼接在一起不太可能对性能产生可衡量的影响。它肯定不会使“请求变慢”!
这是针对您的场景的 SQL 解决方案,但几乎肯定会比将两个结果集拼接在一起要慢,具体取决于所涉及的表的大小。
如果你有超过 1000 个玩具,递归 cte 将达到默认值cte_max_recursion_depth,如 此处解释。
您可以在上述查询之前运行以下命令来删除限制:
或更改 递归 CTE 到非递归 CTE,其中 toys 表上的“nofollow noreferrer">ROW_NUMBER():
这是一个可以玩的dbfiddle。
我今年就遇到过,直接在查询中排序比较复杂,可以参考这个问题MySQL 结果集按固定位置排序如果你想深入了解它的复杂性。
我之前做的比较简单,通过两个查询完成,
这是一个您可以参考的示例