1

我有一张非常大的桌子,叫做fullNames

+----+-----------+----------+--------+
| id | name1     | name2    | count  |
+----+-----------+----------+--------+
| 1  | Homer     | Simpson  |   2    | <-- Homer clicked Simpson's name 2 times
| 2  | Bart      | Simpson  |   1    | <-- Bart clicked Simpson's name once
| 3  | Simpson   | Bart     |   4    | <-- Simpson clicked Bart's name 4 times
......................................
......................................
| 80 | Steven    | Baldwin  |   7    | <-- Steven clicked Baldwin's name 7 times
| 81 | Alec      | Baldwin  |   6    | <-- Alec clicked Balwin 6 times, but there's NO relationship w/ Steven's clicks
+-------+--------+----------+--------+

本质上,我需要能够确定给定用户 ( name1) 点击了给定名称 ( ) 的次数,然后确定相反的情况——点击name2了多少次。当 Simpson 加载他的页面时,他应该看到根据包含他的名字的匹配对的组合 s 排列的名字列表。该列表如下所示:name2name1count

Bart       5
Homer      2

当有一个点击时,我可以将它插入到表中没有问题,但我不知道如何查询这样的东西......我想它最终需要作为 JSON 对象/数组出现,所以这可以是制作成本地移动应用程序,如果您也想解决这个问题,可以加分!

4

2 回答 2

2

对于Simpson,您希望包括其中任一名称为“Simpson”的行,但您要选择(并计入)的名称是“非 Simpson”名称。你可以这样做:

SELECT
  CASE WHEN Name1 <> 'Simpson' THEN Name1 ELSE Name2 END AS ClickName,
  SUM(count) AS ClickCount
FROM fullNames
WHERE 'Simpson' IN (Name1, Name2)
GROUP BY CASE WHEN Name1 <> 'Simpson' THEN Name1 ELSE Name2 END
ORDER BY ClickCount DESC
于 2013-06-14T17:08:50.640 回答
0

这将从数据库中获取结果:

SELECT name, SUM(`count`)
FROM (
    -- records where "your_input_name" is the clicker
    SELECT name2 AS name, `count`
    FROM fullNames
    WHERE name1 = "your_input_name"

    UNION

    -- records where "your_input_name" is the "clickee"
    SELECT name1 AS name, `count`
    FROM fullNames
    WHERE name2 = "your_input_name"
) AS sub
GROUP BY name
ORDER BY `count` DESC

这个另一个问题将向您展示如何解析结果并将其转换为 JSON 字符串,准备好发送到您的应用程序。

于 2013-06-14T17:12:17.727 回答