Halo para master Yii, saya ada masalah dengan query. Kasusnya, saya punya tabel user dan pengalaman_kerja. Setiap user boleh mengisikan lebih dari 1 pengalaman kerja. Masalahnya bagaimana meng-Query data user digabung dengan data pengalaman kerja tetapi data dari pengalaman kerja hanya satu yg diambil.
Saya sudah mencoba cara seperti ini tetapi hasilnya malah cuma mengembalikan 1 record
SELECT * FROM user u LEFT JOIN
(SELECT * FROM pengalaman_kerja pk WHERE posisi LIKE "%programmer%" LIMIT 1) AS pk ON pk.id_user=u.id_user
Mungkin sobat-sobat yii ada yg punya solusinya. terima kasih
Kalau dengan query agan di atas, kita cuma dapat 1 record saja. Padahal maksud saya begini, tabel user ada 100 record dan tabel pengalaman kerja ada 300 record. Saya ingin hasil dari querynya tidak melebihi jumlah record tabel user. Contoh:
Jadi jika sy query user dengan posisi "Programmer" maka hasilnya 2 record, karena user yg mempunyai posisi "Programmer" cuma ada 2 yaitu yg id_usernya 1 dan 3.
+-----------------------------------------
| id_user | username | id_pk | posisi
+---------+----------+-------+------------
| 1 | ali | 1 | Programmer
| 3 | ada | 4 | Programmer
+-----------------------------------------
Maksud saya begitu gan
semoga paham dengan masalah saya. terima kasih sebelumnya
Masalahnya data dari tabel pengalaman kerja itu, 1 user boleh mengisi lebih dari 1 pengalaman kerja. sedangkan data dari tabel user itu unik. satu user hanya boleh input 1x.
Memang misalnya tabel pengalaman kerja itu sama-sama unik, dalam artian 1 user hanya boleh mengisi 1 pengalaman kerja maka dengan query berikut maka masalah akan teratasi.
SELECT * FROM user u LEFT JOIN pengalaman_kerja pk
ON pk.id_user = u.id_user WHERE pk.posisi LIKE "%programmer%";
Tetapi jika user bisa mengisi pengalaman kerja lebih dari 1 maka cara diatas akan menimbulkan duplikasi atau data yg dihasil dobel2 .
Mudahnya begini, user dengan nama ali mempunyai 3 pengalaman kerja. suatu saat admin mencari user dengan pengalaman kerja sebagai "Programmer". Maka data yg diambil seharusnya cuma 1 baris dari tabel user dan 1 baris dari tabel pengalaman kerja.
User
-------------------
1. ali
Pengalaman kerja
-------------------
1. Programmer
2. Network Administrator
3. Computer Engineer
Maka data yg diambil adalah:
User dan Pengalaman Kerja
----------------------------------
| id | nama_user | posisi
----------------------------------
| 1 | ali | Programmer
Nah begitu gan. semoga tambah paham . terima kasih
tapi saya dah nemu caranya. Kayaknya sudah benar . ini querynya gan, ternyata pake INNER JOIN dan GROUP BY:
SELECT u.id_user, u.username, p.posisi FROM user u INNER JOIN (
SELECT j.id_user AS id_user, j.posisi AS posisi FROM pengalaman_kerja j
WHERE j.id_user = id_user AND j.posisi LIKE '%Programmer%' GROUP BY j.id_user
) AS p ON p.id_user = u.id_user
tapi ternyata query saya tersebut ada kekurangannya gan, tidak bisa di sort. pengennya yg ke ambil adalah pengalaman yg terakhir. mungkin agan2 yg master MySQL punya solusi?.
sy coba query kayak gini bisa, tp kelemahannya ternyata query full scan tabel .
SELECT u.id_user, p.waktu_masuk, u.nama_user, p.posisi, p.perusahaan FROM user u
INNER JOIN (
SELECT j.waktu_masuk AS waktu_masuk, j.id_user AS id_user, j.posisi AS posisi,
j.perusahaan AS perusahaan FROM (
SELECT * FROM jobs_exp je WHERE je.id_user=id_user ORDER BY je.waktu_masuk DESC
) AS j
GROUP BY j.id_user
) AS p ON p.id_user=u.id_user