6


8

私はPHP / MySQLに不慣れで、CodeIgniterにはまったく新しいです。 私は多くのMySQLテーブルに情報があります。 テーブルの主キーが$ variableに等しいJOINで取得したいのですが…​ どうすればそれを実行し、主キーフィールドなしですべてのフィールドを取得できますか。

私が今しているのはこれです(ここに結合されている2つのテーブルのみ)。

関数getAll($ id){

$ this-> db-> select( '*'); $ this-> db-> from( 'movies'); $ this-> db-> join( 'posters'、 'movies.id = posters.id'); // WHERE id = $ id ... どういうわけかここに行きます... $ q = $ this-> db-> get();

if($ q  - > num_rows()== 1){$ row = $ q  - > row(); $ data = array( 'id' => $ row-> id、 'title' => $ row-> title、 'year' => $ row-> year、 'runtime' => $ row-> runtime、 ' plotoutline '=> $ row-> plotoutline、' poster_url '=> $ row-> poster_url); }

$ q-> free_result(); $ dataを返します。

id(PK)、title、year、runtime、およびplotoutlineは最初のテーブルの列で、poster_urlは2番目のテーブルのフィールドです。 2番目のテーブルには、既に持っているので取得したくないID(PK)列も含まれています。

4 Answer


21


ジョンは正しいです。 これが一例です。

$ this-> db-> select( 'movies.id、movies.title、movies.year、movies.runtime、totaltime、posters.poster_url'); $ this-> db-> from( 'movies'); $ this-> db-> join( 'posters'、 'movies.id = posters.id'); $ this-> db-> where( 'movies.id'、$ id); $ q = $ this-> db-> get();

これは - > id、 - > title、 - > year、 - > totaltime、および - > poster_urlの各プロパティを持つオブジェクトを返します。 各行からデータを取得するための追加コードは必要ありません。

Active Recordの構文が少し面倒になった場合は、忘れないでください。完全なSQLクエリを使用しても同じ結果が得られます。

$ sql = "トータルタイムとしてmovies.id、movies.title、movies.year、movies.runtimeを選択してください。、posters.poster_urlからの映画内部のポスターにmovies.id = posters.idを追加する。

$ this-> db-> query($ sql、array($ id)) - > result();を返します。

どちらの形式でも、データが確実に適切にエスケープされます。

http://codeigniter.com/user_guide/database/active_record.html[CodeIgniterアクティブレコード]
http://codeigniter.com/user_guide/database/queries.html[CodeIgniterでのクエリバインディング]


4


アスタリスクはすべてのフィールドを返します。 これらのサブセットを返す 他のすべてのフィールドは繰り返しidフィールドを形成します。 '*'を使用するのではなく、単に必要な列をリストしてください。

とにかくアスタリスクを使用しないことはしばしば良い考えです。 アプリの将来的には、誰かがテーブルに大きなフィールドを追加する可能性があります。これはあなたの要件を上回るため、クエリが遅くなります。


1


単純にメソッドチェーンを使うと:

$ this-> db-> select( '*') - > from( 'movies') - > join( 'posters'、 'movies.id = posters.id') - > where( 'movies.id'、$ id) - > get();


0


$ this-> db-> select( '*'); $ this-> db-> from( 'blogs'); $ this-> db-> join( 'comments'、 'comments.id = blogs.id'); $ query = $ this-> db-> get();