1
+---------+-------------+--------------+
|table_uid|  group_uid  | product_uid  |
+---------+-------------+--------------+
|    8901 |        5206 |          184 |
|    8902 |        5206 |          523 |
|    9194 |        5485 |          184 |
|    9195 |        5485 |          523 |
|    7438 |        1885 |          184 |
|    7439 |        1885 |          184 |
+---------+-------------+--------------+

我的目标是显示包含完全相同的 product_uids 集的任何 group_uids。因此 group_uid 5206 和 5485 最终会显示,而 1885 则不会,因为它没有相同的 product_uid 集。我必须通过 bash 脚本来完成此操作,因为我无法在 MySQL 3.23.58 中执行此操作(是的,它非常古老,我讨厌它,但不是我的选择)。我正在尝试将 table_uid、group_uid 和 product_uid 存储在一个数组中,然后比较每个 group_uid 以查看它们是否包含相同的 product_uid。帮助表示赞赏!

4

2 回答 2

1

你如何显示上面的表格?

使用 GROUP_CONCAT 可能会取得一些成功我可以将多个 MySQL 行连接到一个字段中吗?

SELECT group_uid, GROUP_CONCAT(product_uid,separator ','), count(*)
FROM <tab>
GROUP BY group_uid
HAVING count(*) > 1

我不确定它会如何排序字符串,因为我目前没有 mysql

于 2013-08-21T20:48:23.577 回答
1

这里有一些 awk 来收集属于同一组产品的组:

awk '
    NR > 3 && NF == 7 {
        prod[$4] = prod[$4] $6 " "
    } 
    END {
        for (group in prod) 
            groups[prod[group]] = groups[prod[group]] group " "
        for (key in groups) 
            print key ":" groups[key]
    }
' mysql.out 
184 523 :5206 5485 
184 184 :1885 

如果您知道您对哪组产品 ID 感兴趣,则可以将其传入:

awk -v prod_ids="184 523" '
    NR > 3 && NF == 7 {
        prod[$4] = prod[$4] $6 " "
    } 
    END {
        for (group in prod) 
            groups[prod[group]] = groups[prod[group]] group " "
        key = prod_ids " "
        if (key in groups)
            print groups[key]
    }
' mysql.out 
5206 5485 
于 2013-08-22T13:21:27.257 回答