2015-12-02 58 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