Pertanyaan bersama berbilang jadual + subkueri + pertanyaan bersyarat + pengisihan
SELECT
ac.*,
c.car_number,
c.car_name,
cs.car_source,
cb.brand_name,
cm.car_model,
ct.car_type,
c.number_plate,
(
SELECT
COUNT(ar.auction_record_id)
FROM
csp_auction_record AS ar
WHERE
ac.auction_car_id = ar.auction_car_id
) AS auction_count
FROM
csp_auction_car AS ac
INNER JOIN
csp_car AS c
ON
ac.car_id = c.car_id
INNER JOIN
csp_car_brand AS cb
ON
c.car_brand_id = cb.car_brand_id
INNER JOIN
csp_car_source AS cs
ON
c.car_source_id = cs.car_source_id
INNER JOIN
csp_car_type AS ct
ON
c.car_type_id = ct.car_type_id
INNER JOIN
csp_car_model AS cm
ON
c.car_model_id = cm.car_model_id
WHERE
ac.auction_s_time <= CURRENT_TIMESTAMP AND ac.auction_e_time >= CURRENT_TIMESTAMP
ORDER BY
ac.auction_car_id
DESC
LIMIT 0, 10
Lembaran data berkaitan:
csp_car_brand
, senarai jenama kenderaan:
csp_car_type
, jadual jenis kenderaan:
csp_car_source
, jadual sumber kenderaan:
csp_car_model
, meja model kenderaan (model khusus jenama):
csp_car
, meja kenderaan (meja ini terlalu banyak medan, cuma ada yang tersenarai)
csp_auction_record
, senarai rekod lelongan:
Adakah terdapat sebarang masalah prestasi dengan pernyataan sql ini? ? Bagaimana untuk mengoptimumkan? ? Patutkah saya menggunakan PHP untuk membahagikannya kepada pernyataan SQL mudah dan kemudian menggabungkan hasilnya, atau apa? ?
Sejak anda bertanya ini, bermakna anda tahu ada masalah dengan sql anda. Masalahnya ialah jadual csp_auction_record diimbas seberapa kerap yang terdapat dalam jadual csp_auction_car. Seram untuk memikirkannya, tetapi saya melihat ramai orang suka menulisnya seperti ini. Juga, cuba tuliskan keadaan di mana dalam subquery Jumlah data dalam jadual ac akan dikurangkan dengan banyak, dan perkaitan seterusnya akan menjadi lebih cepat.
Boleh ditukar kepada yang berikut, jadual csp_auction_record hanya diimbas sekali sahaja