2016-07-15 205 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']时,我只能得到p.id_category阵列中的第一个c.title。我想获得p.id_category中所有类别的标题。有人能帮我一下吗?我希望我做我自己的理解,作为一个MySQL的新手甚至让我LEFT JOIN的工作是:-)挑战

编辑:

周六早上找到一个解决自己失望,发现它在回答下面的问题:MySQL: How to fetch data with left-join if column contains multiple ids?。感谢所有帮助。

回答

0

尝试用:

$items= $db->fetchAll(); 

然后用foreach去。

1

不好的想法beacause id_category应该是唯一的整数值。如果你想拥有m:n的关系,你需要添加另外一个表,至少有两个你想要关系的表的主键。所以在你的情况下,你将使用主键id_product和id_category创建表title_to_categories。 Id_product将等于对c.id.的p.id和id_category。

+0

谢谢你菲利普。在不久的将来,我将不得不将这些关系存储在单独的表格中,因为我的数据库正在增加更多的相互关系。尽管我现在使用了'GROUP_CONCAT()'和'FIND_IN_SET()',它在短期内做了诡计。 –

+1

好的下次,当你在开始使用它的时候,你在php中创建数据库时考虑模型。这将为您节省大量时间。 –