1

基本的に、IDである主キーは列名を「id」と呼ぶというコーディング規則があります。だからここに私の問題があります。2 つのテーブルを結合していますが、最初のテーブルではなく 2 番目のテーブルの ID を取得しています。select "artists.id, ..." を使用すれば機能することはわかっていますが、将来の拡張に適した "select *" を使用した修正があるかどうかを知りたい (新しい列が来る...) .

これが私のモデルです:

$this->db->select('*');
$this->db->from('artists');
$this->db->join('categories', 'artists.category_id = categories.id');
$this->db->where('id', $id);
$this->db->limit(1);

Print_R を使用すると、テーブル プレフィックスなしですべての列を取得していることがわかります (ただし、artists テーブルではなく、category テーブルからの ID は 1 つだけです)。

4

2 に答える 2

3

テーブルエイリアスで列を修飾する必要があります

$this->db->select('a.id as artist_id, c.id as category_id, a.column2,c.column3');
$this->db->from('artists a');
$this->db->join('categories c', 'a.category_id = c.categories.id');
$this->db->where('a.id', $id);
$this->db->limit(1);

継続して利用したい場合SELECT *

$this->db->select('a.*, c.*, a.id as artist_id, c.id as category_id');
$this->db->from('artists a');
$this->db->join('categories c', 'a.category_id = c.categories.id');
$this->db->where('a.id', $id);
$this->db->limit(1); 

最後の重複列が返されることに注意してください。したがって、としてa.*,c.*返さc.idid、としてc.*,a.*返さa.ididます。

于 2013-08-05T18:23:14.423 に答える
0

手間を省くために、将来のために、常に列名の前にテーブルを使用してください。ここにはロジックはありません。* を探すと、すべてのフィールドを意味します。たとえば、Oracle ではすべてのフィールドを前にテーブルが表示されます。MySQL ではそうではないと思いますが、もし私があなただったとしても、それ。

于 2013-08-05T18:24:20.837 に答える