亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

MySQL解決方案基于2個匹配的ID連接多行文本

MySQL解決方案基于2個匹配的ID連接多行文本

PHP
郎朗坤 2023-07-08 16:22:08
我正在使用 MySQL (5.5.65-MariaDB) 并有一個由表、generated_text_tbl. 以下是該表中的一些示例數據。-----------------------------------------------id | substance_id | display_id | generated_text   -----------------------------------------------1  | 54           | 139        | foo-----------------------------------------------2  | 54           | 139        | bar----------------------------------------------3  | 1933         | 139        | baz-----------------------------------------------  4  | 38           | 27         | xyz-----------------------------------------------id是一個AUTO_INCREMENT字段。和是外鍵,引用其他表中的記錄(substance_id分別為和)。display_idsubstances.iddisplay.id我想輸出字段中的文本generated_text- 用 HTML 換行符 ( <br>) 分隔 - 如果存在匹配substance_id和display_id行。如果沒有匹配項(即單獨的行),則generated_text仍應輸出,但不需要該<br>字符,因為沒有任何內容可以分隔。我有一個可以在 PHP 中運行的解決方案,但如果可能的話,我想要一個純 SQL 解決方案。我已經寫出了我的邏輯,因為這在技術上是可行的,盡管是在 PHP 中。對于上面的示例數據,正確的輸出如下:foo<br>bar:因為有 2 行substance_id和display_id匹配(分別是 54 和 139)。baz:只有 1 行WHERE substance_id = 1933 AND display_id = 139。xyz:與上面的邏輯相同,只有 1 行WHERE substance_id = 38 AND display_id = 27。從邏輯上講,我的 PHP 腳本是這樣工作的:所有 uniquesubstance_id都被加載到一個數組中。相當于SQL SELECT DISTINCT(substance_id) FROM generated_text_tbl。所有 uniquedisplay_id都被加載到一個數組中。相當于SQL SELECT DISTINCT(display_id) FROM generated_text_tbl。循環 (1),并在 (2) 上進行內循環。這有效地循環了每個substance_id和display_id組合,即:substance_id = 54 AND display_id = 139(2 行)substance_id = 54 AND display_id = 27(0 行)substance_id = 1933 AND display_id = 139(1 行)substance_id = 1933 AND display_id = 27(0 行)substance_id = 38 AND display_id = 139(0 行)substance_id = 38 AND display_id = 27(1 行)generated_text然后它根據上述條件獲得一個數組。如果數組大小大于 1 個元素,則<br>在每個元素之間添加一個字符。如果只有 1 個元素,則<br>不需要字符,因為只有 1 行,generated_text因此不需要分解任何字符。var_dump($output)上面腳本的結果是foo<br>bar,這就是我想要的。盡管這在邏輯上可行,但效率很低(當表中有數千行時generated_text)。有沒有一個純 SQL 的解決方案?
查看完整描述

1 回答

?
肥皂起泡泡

TA貢獻1829條經驗 獲得超6個贊

你在追求這樣的東西不是嗎?

查詢1

SELECT?

? `substance_id` ,?

? `display_id`,?

? GROUP_CONCAT( `generated_text` SEPARATOR '<br>' ) as concact_text

from generated_text_tbl?

group by?

? `substance_id` ,?

? ?`display_id`

結果


| substance_id | display_id | concact_text |

|--------------|------------|--------------|

|? ? ? ? ? ?38 |? ? ? ? ?27 |? ? ? ? ? xyz |

|? ? ? ? ? ?54 |? ? ? ? 139 |? ?foo<br>bar |

|? ? ? ? ?1933 |? ? ? ? 139 |? ? ? ? ? baz |

查詢2:


SELECT?

? `substance_id` ,?

? `display_id`,?

? GROUP_CONCAT( `generated_text` ORDER BY id DESC SEPARATOR '<br>') as concact_reverse_text

from generated_text_tbl?

group by?

? `substance_id` ,?

? ?`display_id`

結果


| substance_id | display_id | concact_reverse_text |

|--------------|------------|----------------------|

|? ? ? ? ? ?38 |? ? ? ? ?27 |? ? ? ? ? ? ? ? ? xyz |

|? ? ? ? ? ?54 |? ? ? ? 139 |? ? ? ? ? ?bar<br>foo |

|? ? ? ? ?1933 |? ? ? ? 139 |? ? ? ? ? ? ? ? ? baz |

查看完整回答
反對 回復 2023-07-08
  • 1 回答
  • 0 關注
  • 154 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號