2015-12-02 72 views
0

我有两个表中包含的数据:如何在JOIN中包含额外的select语句? PHP - MySQL的

tagmap

=============== 
item | tagid 
--------------- 
1111 | 101 
1111 | 102 
2222 | 101 
2222 | 103 
3333 | 104 
4444 | 105 
4444 | 106 
5555 | 101 
5555 | 103 
============== 

项目+标签识别=复合主键

风味

=============== 
id | flavor 
--------------- 
101 | flavorA 
102 | flavorB 
103 | flavorC 
104 | flavorD 
105 | flavorE 
106 | flavorF 
=============== 

ID =主键

我运行PHP + MySQL。我有一个像这样的查询;

SELECT DISTINCT GROUP_CONCAT(a.tagid ORDER BY a.tagid) tags 
    FROM tagmap a 
    JOIN tagmap b 
    ON b.item = a.item 
    AND b.tagid <= a.tagid 
WHERE b.tagid = '101' 
GROUP 
    BY a.item; 

我把它存储到一个变量$query,它返回的数据就像;

flavorA,flavorB 
flavorA,flavorC 

在PHP中,我使用

$result = mysql_query($query); 
while($row = mysql_fetch_array($result)){ 
    $tag = $rowa['tags']; 
    echo $tag."<br>"; 
} 

代码以打印结果。但是随着这一点,我想要味道ID,我想存储到另一个变量,如;

$result = mysql_query($query); 
while($row = mysql_fetch_array($result)){ 
    $tag = $rowa['tags']; 
    $tagid = $rowa['tagid'];//what I am looking for. 
    echo $tag."<br>";//echoes flavorA,flavorB 
    echo $tagid."<br>";//want to echo 101,102 
} 

在每foreach循环,我想存储id S作为CSV在一个变量和flavor S作为CSV另一个变量。例如,当它返回flavorA,flavorB时,我想将它存储在$tag(已在做)和101,102$tagid(我想要额外购买)。

我该怎么做?我的意思是,在哪里/如何包含select flavor声明以及如何获取?

+0

@Strawberry,但这种情况下返回'id's孤单。现在我需要两个,名称和ID ..希望你理解... –

+0

@Strawberry你能不能将它张贴作为答案请.. –

+0

那么我在哪里使用select name和ids语句?它是否像'SELECT ID DISTINCT GROUP_CONCAT(a.tagid ORDER BY a.tagid)tags'? –

回答

0

因此,要回答你的问题......

SELECT t.item 
    , f.flavor 
    FROM tagmap t 
    JOIN flavors f 
    ON f.id = t.tagid; 
+------+---------+ 
| item | flavor | 
+------+---------+ 
| 1111 | flavorA | 
| 1111 | flavorB | 
| 2222 | flavorA | 
| 2222 | flavorC | 
| 3333 | flavorD | 
| 4444 | flavorE | 
| 4444 | flavorF | 
| 5555 | flavorA | 
| 5555 | flavorC | 
+------+---------+ 
+0

这不是我要找的。我想要一个像'flavorA,flavorB,101,102'这样的东西。我想将'flavorA,flavorB'存储在一个变量中,'101,102'存储在另一个变量中。 –

+0

在question –

+0

@blasteralfredΨ处添加了更多详细信息您将在PHP – Strawberry

0

简单地包括两个GROUP_CONCAT()列,通过ITEM在SQL查询分组。而如果需要得到一个不同的结果集,设置它派生表的子查询中:

SQL OUTPUT

tagids  flavors 
101,102 flavorA,flavorB 
101,103 flavorA,flavorC 
104  flavorD 
105,106 flavorE,flavorF 

然后让PHP的关联数组引用tagidsflavors列。 注意:我使用mysqli_而不赞成使用(现在在PHP 7中已停用)mysql_ *函数。

$result = mysqli_query($con, $query); 

if ($result) { 

    /* fetch associative array */ 
    while ($row = mysqli_fetch_assoc($result)){ 
     echo $row['flavors']."<br>"; //echoes flavorA,flavorB 
     echo $row['tagids']"<br>"; //echoes 101,102 
    } 

    /* free result set */ 
    mysqli_free_result($result); 
} 

/* close connection */ 
mysqli_close($con); 
+0

中执行此操作,代码显示'flavorA,flavorC'两次。我希望它只出现一次,跳过多余的行。 –

+0

查看派生表用于返回不同记录的位置。 – Parfait