Tajuk yang ditulis semula ialah: Dapatkan produk yang dibeli oleh 10 pelanggan pertama
P粉386318086
P粉386318086 2023-08-29 21:31:29
0
1
452
<p>Saya ingin menulis pertanyaan SQL dalam laravel/php untuk mendapatkan 10 produk berbeza teratas yang dibeli oleh pelanggan. </p> <p>Struktur jadual saya adalah seperti berikut:</p> <ul> <li><kod>Pesanan</kod>Jadual (ID Pelanggan, ID Produk, dll...)</li> <li><kod>Produk</kod>Jadual (ID produk, nama produk, dll...)</li> </ul> <p>Ini ialah percubaan pertanyaan saya: </p> <pre class="brush:php;toolbar:false;">PILIH produk.* DARI produk WHERE products.id = [SELECT DISTINCT (products.id) DARIPADA pesanan WHERE customer.id=id->list(10)]</pre></p>
P粉386318086
P粉386318086

membalas semua(1)
P粉951914381

Saya dapat melihat arah yang anda cuba tuju dengan pertanyaan anda, tetapi malangnya ia tidak akan memberikan anda 10 keputusan teratas. Sebaliknya, anda mungkin tidak mendapat hasil sama sekali:

SELECT products.* 
 FROM products 
 WHERE products.id=[SELECT DISTINCT (products.id) 
                 ^^^   FROM orders 
                       WHERE customer.id=id->list(10)]

= bermakna anda sedang mencari padanan yang tepat dan subkueri anda harus mengembalikan 10 baris data, jika anda menggunakan operasi ini, anda akan mendapat ralat ini.

Tetapi jika anda menukarnya kepada IN, anda mungkin mendapat ralat ini

Berdasarkan percubaan semasa anda, pilihan anda adalah untuk membuatnya JOIN. Walau bagaimanapun, saya tertanya-tanya bagaimana anda mendapat 10 teratas anda? Saya dapat lihat anda sedang mencari produk dalam 10 teratas, tetapi berdasarkan apa? Jumlah Jualan? Kuantiti pesanan?

Dalam pengertian ini, berikut ialah contoh 10 produk teratas yang disusun mengikut kuantiti pesanan.

SELECT P.* 
FROM Products P 
 JOIN ( SELECT product_id
         FROM Orders
        GROUP BY product_id
        ORDER BY SUM(Qty) DESC
    LIMIT 10) O 
ON P.id=O.product_id;

Subkueri tidak perlu, tetapi saya meniru subkueri yang anda cuba, walaupun prosesnya tidak betul-betul sama. Berikut ialah versi tanpa subkueri:

SELECT P.*
FROM Orders O 
 JOIN Products P ON O.product_id=P.id
GROUP BY product_id
ORDER BY SUM(Qty) DESC
LIMIT 10;

Atau mungkin anda sedang mencari 10 teratas yang disusun mengikut jumlah jualan?

SELECT P.*
FROM Orders O 
 JOIN Products P ON O.product_id=P.id
GROUP BY product_id
ORDER BY SUM(UnitPrice*Qty) DESC
LIMIT 10;

Demo biola

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!