2016-07-15 8 views
1

私が今まで完璧に働いている次のコードを持っている。「カテゴリー」テーブル内の唯一のカテゴリは、製品に関連していることが許されたので、以前MySQL LEFT JOIN配列では、複数の行を返すにはどうすればよいですか?

$db->table = "horse_products as p"; 
$db->colums = "p.*, l.address as address, l.storename as supplier_name, c.title as cat_title, c.id_parent as id_parent"; 
$db->join = "LEFT JOIN locations as l ON l.id = p.id_location" 
       ." LEFT JOIN categories as c ON c.id = p.id_category WHERE c.id_parent = 8"; 
$db->orderBy = "p.id_location ASC, p.id_product ASC"; 
$items = $db->Select(); 

p.id_categoryが整数でした。しかし今日、私はp.id_categoryをコンマ区切りの配列にすることに決めました。これの欠点は、$item['cat_title']をエコーし​​ようとすると、最初にc.titlep.id_categoryアレイ内にあることになります。 p.id_category内のすべてのカテゴリのタイトルを取得したいと考えています。誰も私をここで助けることができますか?でも、私のLEFTを取得MySQLの初心者が仕事にのJOINのように私は、私は自分自身を理解作ったことを願っています

EDIT :-)挑戦でした:

が解決策を見つけるために今朝自分自身を座ってました次の質問への回答:MySQL: How to fetch data with left-join if column contains multiple ids?。助けていただいた皆様に感謝します。

答えて

0

はして試してみてください。

$items= $db->fetchAll(); 

そしてforeachので行きます。

1

不適切なアイデアbeacause id_categoryは一意の整数値である必要があります。 m:nリレーションシップを使用する場合は、リレーションシップを持つテーブルの少なくとも2つのプライマリ外部キーを持つ別のテーブルを追加する必要があります。したがって、あなたの場合、主キーid_productとid_categoryでテーブルtitle_to_categoriesを作成します。 Id_productはp.idと等しく、id_categoryはc.idになります。

+0

ありがとうございました。近い将来、これらの関係を別々のテーブルに格納する必要があります。なぜなら、データベースはますます相互関係が深まってきているからです。今のところ私は短期間トリックをした 'GROUP_CONCAT()'と 'FIND_IN_SET()'を使っていました。 –

+1

次回は、データベースを作成して使用する前にphpでモデルを考えているときに使います。それはあなたに多くの時間を節約します。 –

関連する問題