1

マテリアル テーブル内の ID が 20 の特定のマテリアルについて、次の 2 つのテーブルがあります。

chemical_name_id | chemical_name  (table name: ml_chemical_names)
================================
1                | Polysomething

common_name_id | common_name (table name: ml_common_names)
=============================
1              | PMMA
2              | Lucite
3              | Perspex
4              | Plexiglas

material_id | material  (table name: ml_materials)
======================
20          | Acrylic

私はこれらのテーブルを結合することに少し慣れていますが、次のように 2 つのルックアップ テーブルを作成しました。

material_id | common_name_id (table name: ml_materials_common_names)
============================
20           | 1
20           | 2
20           | 3
20           | 4

and

material_id | chemical_name (table name: ml_materials_chemical_names)
===========================
20          | 1

Active Record (CodeIgniter) 形式の SQL は次のとおりです。

$this->db->like('cn.common_name', $options['keyword']);
$this->db->or_like('chem.chemical_name', $options['keyword']);
$this->db->join('ml_materials_chemical_names mchem', 'mchem.material_id = m.material_id', 'inner');
$this->db->join('ml_chemical_names chem', 'chem.chemical_name_id = mchem.chemical_name_id', 'inner');
$this->db->join('ml_materials_common_names mcn', 'mcn.material_id = m.material_id', 'inner');
$this->db->join('ml_common_names cn', 'cn.common_name_id = mcn.common_name_id', 'inner');
return $this->db->get('ml_materials m')->result();

これは AJAX 検索フォームで使用されます。つまり、「polysomething」で検索すると、4 つの結果が得られます。1つだけ欲しい。私のテーブルが間違って構造化されているのか、それとも私の結合なのかはわかりません。左結合、右結合、および外部結合を試しましたが、返される結果に関して何も変わらないようです。

誰か助けてくれませんか?

4

0 に答える 0