Join Left Table

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

kalo gini gimana??


SELECT * FROM user u LEFT JOIN pengalaman_kerja pk on u.id_user = pk.id_user where u.posisi LIKE "%programmer%" LIMIT 1

Terima kasih agan Angela88 sudah mau merespon.

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:




//tabel user

+------------------------+

| id_user | username     |

+---------+--------------+

| 1       | ali          |

| 2       | adi          |

| 3       | ada          |

+---------+--------------+


// tabel pengalaman_kerja

+-------------------------------------

| id_pk | id_user  | posisi 

+-------+----------+------------------

| 1     | 1        | Programmer

| 2     | 1        | Network Admin

| 3     | 2        | Accounting

| 4     | 3        | Programmer

| 5     | 3        | System Analyst

+-------+----------+------------------



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 :D

semoga paham dengan masalah saya. terima kasih sebelumnya

tinggal limitnya yg diganti kan???

limit itu kan menentukan jumlah record yg ditampilkan…

kalo mau ditampilkan semua ya limitnya di delete aja…

cmiiw

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 :D.

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 :D. terima kasih

pake distinct ga bisa???


select distinct(nama_user), ---------

g bisa gan.

tapi saya dah nemu caranya. Kayaknya sudah benar :D. 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



Semoga berguna bagi yang lain :)

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



terima kasih