簡體   English   中英

在MySQL上模擬多維數組

[英]Simulate multidimensional array on MySQL

我有兩個具有這些結構的表:

文章:article_id,文本標簽:tag_id,article_id,文本

如何使用一個查詢選擇所有文章和所有關聯的標簽? 據我所知,MySQL只能返回一個二維數組,因此我可以將一個解決方案連接到文章選擇結果的列中。 但是怎么樣?

關系數據以元組的形式組織。 元組具有n維,並且可以使用單個關系(表)輕松地描述從m維向量到標量或k維值的函數映射。 (n = m + k)

如果您需要/建議只用於表示層,那么您可以執行Eric Hogue建議的操作,但如果這是在流程的中間或另一個流程的開始,那么Fabrik的建議是正確的方法。

GROUP_CONCAT使數據非關系,因此更難以用作后續SQL處理的基礎。 因此,如果您的客戶端層無法為您執行此操作,則此命令的目的是使輸出成為可能。 不要試圖根據演示問題對核心關系進行建模。

看一下Group_Concat MySQL函數。 你可以寫類似的東西

Select A.article_id, A.text GROUP_CONCAT(B.Text) As Tags 
From articles A 
Left Outer Join tags B Using (article_id) 
Group By A.article_id, A.Text

正如Unreason在他的回答中提到的那樣,這只應該用於顯示數據並且我建議它,因為你提到連接問題中的標簽。 如果您需要使用日期,請使用fabrik建議的簡單連接。

SELECT * FROM articles LEFT JOIN tags ON article.article_id = tags.article_id

如果按文章排序,則通過跳過與重復文章ID關聯的文章屬性來創建數據表示 - 或者只是覆蓋它們:

// select a.article_id, a.text, b.tag_id, b.text as tag_text
// from articles a, tags b
// where a.article_id=b.article_id
$articles=array();
while ($r=mysql_fetch_assoc($result)) {
  $article[$r['article_id']=array(
       'text'=>$r['text'];
       );
  @if (!is_array($article[$r['article_id']]['tags'])) {
       $article[$r['article_id']]['tags']=array();
  }
  $article[$r['article_id']]['tags'][$r['tag_id']]=$r['tag_text'];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM