Implementasi Inner Join pada Function

Pagi menjelang siang teman-teman. butuh pencerahan banget nih.. Pada class User saya membuat fungsi seperti ini :


public function get_topik()
  {
    return $this->_db->get_info('forum');
  }

Pada class Database fungsi get_info nya seperti ini :

 public function get_info($table, $column = '', $value = '')
  {
    if( !is_int($value) )
      $value = "'". $value . "'";

      if( $column != '' ) {
        $query  = "SELECT * FROM $table WHERE $column = $value";
        $result = $this->mysqli->query($query);

        while($row = $result->fetch_assoc()){
           return $row;
        }
      }else{
        $query  = "SELECT * FROM $table";
        $result = $this->mysqli->query($query);

        while($row = $result->fetch_assoc()){
           $results[] = $row;
        }

        return $results;
      }
  }

Kemudian hasil dari kedua fungsi di atas saya tampilkan dengan cara seperti ini :

 <?php
	require_once "../core/init.php";

	if( !Session::exists('username') ){
		Redirect::to('../login');
	}


	$topik = $user->get_topik();

	require_once "../theme/header.php";

	?>

------------------------------------------------------------------

<?php foreach ($topik as $_user): ?>
<div class="container-topic">
     <h5><? echo $_user['judul'] ?></h5>
     <p><? echo $_user['topik'] ?></p>
</div>
<?php endforeach; ?>

Selanjutnya saya ingin melakukan iner join pada database antara table forum dengan table user agar dapat menampilkan Topik dan si Pemilik topik kedalam satu query, untuk hal ini sudah saya buatkan relasinya di database. Kendalanya adalah cara implementasi kode dibawah ini untuk diterapkan kedalam cara yang saya gunakan di atas bagaimana?

 $sql = "SELECT forum.*, user.username
        FROM forum INNER JOIN user
        ON forum.user_id = user.id AND forum.id = $id";

Terimakasih sebelumnya.. UP

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Diperbarui 6 tahun yang lalu

9 Jawaban:

kalo saran dr ane sendiri sih pas query pertama aja langsung pake inner join

avatar punyaarn
@punyaarn

55 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

@punyaarn Caranya gimana gan? Seperti ini kah? Saya coba gini malah tidak berfungsi..

   public function get_info($table, $column = '', $value = '')
  {
    if( !is_int($value) )
      $value = "'". $value . "'";

      if( $column != '' ) {
        $query  = "SELECT forum.*, user.username FROM forum INNER JOIN user ON forum.user_id = user.id AND forum.id = $value";
        $result = $this->mysqli->query($query);

        while($row = $result->fetch_assoc()){
           return $row;
        }
      }else{
        $query  = "SELECT * FROM $table";
        $result = $this->mysqli->query($query);

        while($row = $result->fetch_assoc()){
           $results[] = $row;
        }

        return $results;
      }
  }

kasih contohnya dong gan.. hehe

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

Sudah oke ni gan.. ternyata ada sedikit kesalahan. terimakasih banyak agan @punyaarn atas responnya

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

Pake Pirlo DB PDO lebih simpel kita buat metode Join tablenya.... tinggal tambahkan ini...


public function JoinAll($join)
{
  $this->_query="SELECT $join";
  $this->_join=$join;
  return $this;
} // Penutup fungsi JoinAll

dan ini untuk methode where-nya


public function join_Where($col, $sign, $value, $bridge= ' AND ')
{
  $this->_query="SELECT $this->_join WHERE";

  if(count($this->_prevData)==0)
  {
    $bridge='';
  }

  $this->_prevData[]= array(
    'col'   => $col,
    'sign'  => $sign,
    'value' => $value,
    'bridge'=> $bridge,
  );

  $this->getWhere($bridge);
  return $this;
} // Penutup Fungsi join_Where

nanti saat pake metodenya kita tinggal pake kode ini...


$this->_db->setTable('nama_table');
$this->_db->JoinAll('sql join table')->all();
// bisa dichaning... dengan join_Where seperti ni...
$data=$this->_db->join_Where('key', '=', 'key_value')->all();
// pokoknya masih nyambung dengan methode lain hanya menambahkan dua methode di atas.

semoga bermanfaat, maaf kalo ada yang salah...

avatar datrosumendong
@datrosumendong

201 Kontribusi 38 Poin

Dipost 6 tahun yang lalu

Trimakasih Mas @datrosumendong tapi saya belum pelajari cara PDO jadi belum paham, baru sampai ke konsep OOP itupun belum ngerti banget. hehe Ada kendala lagi nih mas, saya tidak tau cara query saya ini bener atau tidak. Mohon pencerahannya lagi..

pada class user :

 public function get_topik()
  {
    return $this->_db->get_info('forum INNER JOIN user ON forum.user_id = user.id AND forum.id');
  }

Sampai disana datanya berhasil di tampilkan berikut si penulis topiknya. Tapi data yang tampil ini tidak berurutan, saya mau menampilakannya berdasarkan id terbesar tapi ketika saya menambahkan ORDER BY id DESC pada kode di atas halaman jadi tidak berfungsi, alias tidak bisa di buka. Masalahnya dimana yah? atau cara saya yang salah? untuk fungsi get_info nya saya bikin fleksible seperti lampiran paling atas. mohon bantuan :(

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

Periksa lagi fungsi get_info-nya gan... keliatannya belum fleksible... coba pelajari PDO database dari sekolah koding... https://sekolahkoding.com/kelas/membuat-kelas-abstrak-pdo-database pasti akan paham tentang apa itu OOP... kalo liat dari code yang agan buat... sepertinya kebalik... jika ingin flexible... nilai query kita masukan kedalam parameter pada fungsi... sehingga bebas kita ganti2 tanpa merubah fungsi lagi... atau menambah fungsi itu sendiri... itu baru namanya flexible... saya juga masih baru belajar gan...

avatar datrosumendong
@datrosumendong

201 Kontribusi 38 Poin

Dipost 6 tahun yang lalu

Jawaban Terpilih

coba gini gan


public function get_topik()
  {
    return $this->_db->get_info('forum INNER JOIN user ON forum.user_id = user.id AND forum.id =$id ORDER BY forum.id DESC');
  }
avatar BroGoeh
@BroGoeh

121 Kontribusi 47 Poin

Dipost 6 tahun yang lalu

Mas @datrosumendong terimakasih.. :)

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

Mas @BroGoeh Terimakasih.. ORDER BY nya berfungsi, tapi bagian ininya (=$id) saya hapus.. Matur nuwun sanget..

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban