php - Bagaimana untuk menulis SQL untuk pertanyaan bersama berbilang jadual ini?
阿神
阿神 2017-05-16 13:07:35
0
5
829

Masalah saya adalah seperti yang ditunjukkan dalam gambar di bawah Struktur pangkalan data dan data berada dalam blok kod di bawah.

< /p>

Hasil yang saya harap dapat ialah:

Struktur jadual dan data adalah seperti berikut

BUAT JADUAL A(
id INT BUKAN NULL,
num INT BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM A(id,num) NILAI(1,5),(2,7),(3,6);

BUAT JADUAL B(
bantuan INT BUKAN NULL,
sid INT BUKAN NULL,
kandungan VARCHAR(20) BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM B(bantuan,sid,kandungan) NILAI(3,1,'A'),(3,2,'B'),(3,3,'C');

BUAT JADUAL C(
id INT BUKAN NULL,
masa INT BUKAN NULL,
libs VARCHAR(20) BUKAN NULL
)CHARSET=utf8;

MASUKKAN KE DALAM C(id,masa,libs) NILAI(2,18,'wagaga'),(3,16,'aaaa'),(1,15,'cc'),(3,17,'dddd') ,(4,14,'eeee'),(3,10,'ffff'),(3,11,'bbbb');

Ini boleh memenuhi keperluan saya, tetapi kecekapan pelaksanaan terlalu rendah...

pilih * daripada
(
PILIH berbeza
    a.id,a.num,b.aid,b.sid,b.content,c.id sebagai cid,c.time,c.libs
DARI
    a
KIRI SERTAI b b ON b.aid = a.id
KIRI SERTAI c PADA c.id = b.sid
DI MANA a.id = 3
PESANAN MENGIKUT masa DESC
) sebagai TMP
KUMPULAN MENGIKUT cid ;

Adakah pakar yang boleh menyediakan cara penulisan yang lebih cekap?

阿神
阿神

闭关修行中......

membalas semua(5)
習慣沉默
SELECT
    a.id,a.num,b.aid,b.sid,b.content,c.id,substring_index(group_concat(c.time order by c.time desc),',',1) ctime,substring_index(group_concat(c.libs order by c.time desc),',',1) clibs
FROM a
JOIN b ON b.aid = a.id
JOIN c ON c.id = b.sid
WHERE a.id = 3
GROUP BY c.id ;
Peter_Zhu
SELECT
    *
FROM
    a a
LEFT JOIN b b ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
GROUP BY c.id

Jika ia adalah data di atas, sql ini harus berpuas hati. . . Kalau tak puas hati, just don’t care...


Ini hasil pertanyaan saya

小葫芦
select A.num,b.content,c.time,c.libs from A left join B on A.id=B.id left join C on C.id = A.id order by C.time desc limit 0,1
曾经蜡笔没有小新

Apa yang anda mahukan tidak diterangkan dengan jelas dalam soalan. . .

phpcn_u1582
select * from
(
SELECT distinct
    a.id,a.num,b.aid,b.sid,b.content,c.id as cid,c.time,c.libs
FROM
    a
LEFT JOIN b  ON b.aid = a.id
LEFT JOIN c ON c.id = b.sid
WHERE a.id = 3
ORDER BY time DESC
) as TMP
GROUP BY cid ;

Ada masalah kecekapan..

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan