Postingan lainnya
merubah array menjadi string pada codeigniter
jadi gini gan saya mau membuat aplikasi sistem pakar menggunakan metode backwardchainning nah saya ingin ketika user konsultasi akan ada pertanyaan dan ketika pertanyaan itu di jawab ya maka data akan disimpan di database dan dari data itu kita akan mengambil kodePertanyaannya untuk menyusuaikan dengan yang ada pada database. permasalahannya adalah ketika saya ingin mengambil nilai pada tabel riwayatjawaban(kodePertanyaan) itu berupa array saya ingin merubahnya menjadi string.
ini codingan saya :
<?php
$this->db->select('kodePertanyaan');
$this->db->from('riwayatjawaban');
$query=$this->db->get();
$baris =$this->db->get('riwayatjawaban','kodePertanyaan')->num_rows();
$tes= $query->result_array();
$tes= $query->result_array();
foreach ($query->result() as $row)
{
$a= $row->kodePertanyaan;
$b= "%$a%";
echo "$b<br>";
}
$query2=$this->db->query("SELECT KodePertanyaan from tabelrule where KodePertanyaan like ('$b')");
foreach ($query2->result() as $as) {
$c = $as->KodePertanyaan;
echo "$c<br>";
}
?>
pada kasus di atas kodePertanyaan berisikan 3 buah nilai = yang pertama yaitu %T0001% ,%T0002% dan %T0005% . tetapi yang tampil ketika saya memanggil $b hanya terdapat 1 nilai saja yaitu %T0005%, yang saya ingin kan adalah mengambil kodePertanyaan dari tabel riwayatjawaban dan memasukannya kedalam query select like $b. $b berisi ('%T0001%,%T0002%,%T0005%').
tolong para mastah dibantu pls buat tugas saya :(
3 Jawaban:
Jawaban Terpilih
Ada dua kesalahan dalam kode diatas.
Pertama, variabel di overwrite dalem for. Jadi isinya bakal cuma dapet kode yang terakhir.
foreach ($query->result() as $row)
{
$a= $row->kodePertanyaan;
$b= "%$a%"; // -> ini bakal ke overwrite di tiap loop
echo "$b<br>";
}
Kedua, seandainya $b sudah jadi array-pun query-nya bakal salah. Kalo pake query kaya gini bakal syntax error.
$query2=$this->db->query("SELECT KodePertanyaan from tabelrule where KodePertanyaan like ('$b')");
Karena hasil querynya bakal kaya gini :
SELECT KodePertanyaan from tabelrule where KodePertanyaan like ('%T0001%,%T0002%,%T0005%');
Padahal yang bener kaya gini :
SELECT KodePertanyaan from tabelrule where KodePertanyaan like '%T0001%' or KodePertanyaan like '%T0002%' or KodePertanyaan like '%T0005%'
Solusinya:
<?php
$this->db->select('kodePertanyaan');
$this->db->from('riwayatjawaban');
$query = $this->db->get();
$b = array();
foreach ($query->result() as $row) {
$a = $row->kodePertanyaan;
$b[] = 'KodePertanyaan LIKE "%'.$a.'%"'; //Untuk kesalahan pertama
}
$query2 = $this->db->query("SELECT KodePertanyaan FROM tabelrule WHERE ".implode(" OR ", $b)); //Untuk kesalahan kedua
foreach ($query2->result() as $as) {
$c = $as->KodePertanyaan;
echo "$c<br>";
}
?>
@rangerkuning
bisa kok gan make query ini :
SELECT KodePertanyaan from tabelrule where KodePertanyaan like ('%T0001%,%T0002%,%T0005%');
karena isi data nya adalah array. thanks broo udah bantu tpi ini saya juga masih bingung gimana cara penerapannya hehe. kalo boleh minta saran,link atau source code tentang sistem pakar dong gann hehe saya stuck di metode backwardchaning
pada bagian ini :querynya ga jalan broo karena $b bukan string
$query2 = $this->db->query("SELECT KodePertanyaan FROM tabelrule WHERE ".implode(" OR ", $b));
yang tampil jadi begini :
SELECT * from tabelpertanyaan where KodePertanyaan LIKE %T0001% OR KodePertanyaan LIKE %T0002% OR KodePertanyaan LIKE %T0003% OR KodePertanyaan LIKE %T0004% OR KodePertanyaan LIKE %T0005
T0001% OR KodePertanyaan LIKE %T0002% OR KodePertanyaan LIKE %T0003% OR KodePertanyaan LIKE %T0004% OR KodePertanyaan LIKE %T0006% OR KodePertanyaan LIKE %T0007% OR KodePertanyaan LIKE %T0008% OR KodePertanyaan LIKE %T0009
%
seharusnya kan kalo query like pakai '' jadi :
SELECT * from tabelpertanyaan where KodePertanyaan LIKE '%T0001%' OR KodePertanyaan LIKE '%T0002%'
Ups, salah ya. Maklum, ngga saya coba dulu hehe. Jawaban di atas sudah di-update. Biar pake kutip ubah jadi :
$b[] = 'KodePertanyaan LIKE "%'.$a.'%"';
Btw, saya belum pernah buat sistem pakar jadi kurang tau mas.