帮助SQL查询

时间:2011-01-26 20:22:47

标签: php sql

| id | pid | idx | type | key       | val        |
|----+-----+-----+------+-----------+------------|
|  1 |   0 |     | o    |           |            |
|  2 |   1 |     | s    | time      | 2010-...   |
|  3 |   1 |     | s    | ip        | 127.0.0.1  |
|  4 |   1 |     | o    | p         |            |
|  5 |   4 |     | s    | tape/id   | 8abade...  |
|  6 |   4 |     | s    | tape/page | http://... |
|  7 |   0 |     | o    |           |            |
|  8 |   7 |     | a    | foo       |            |
|  9 |   8 |   0 | s    |           | bar        |
| 10 |   8 |   1 | o    |           |            |
| 11 |  10 |     | s    | baz       | quux       |
| 12 |   4 |     | s    | tape/dref | x          |

如果你看不清楚,可以在pastebin上找到它(http://pastebin.com/2RDn7ad0)。

好的,我有一个这样的数据库。它包含许多行(比上例中的要多得多)。我现在唯一关心的字段是tape / id和tape / dref。 现在,我至少有两个字符串。对于一个字符串,我有一个这样的查询:

select count(*) as count from (select distinct e.val from entries e where e.key='tape/id' and (select s.val from entries s where s.pid=e.pid and s.key='tape/dref')='x') q;

此查询可以正常工作。现在,我无法解决的问题是具有相同的查询,但它计算了存在两个或多个字符串的行数(在上面的示例中只有一个字符串“x”)。

谢谢!

3 个答案:

答案 0 :(得分:2)

SELECT  COUNT(DISTINCT eid.val)
FROM    entries eid
JOIN    entries edref
ON      edref.pid = eid.pid
        AND edref.key = 'tape/dref'
        AND edref.val IN ('x', 'y')
WHERE   eid.key = 'tape/id'

UNIQUE INDEX上创建entries(key, pid, val),以便快速开展工作。

答案 1 :(得分:1)

我可以建议在查询结尾处将='x'替换为IN (list of values)吗?

例如:... IN ('x', 'y', 'z')

答案 2 :(得分:0)

(其中e.key ='tape / id'或其中e.key ='tape / dref')AND(其中e.val ='x'或其中e.val = ???)