MySQL数据库示例:
data_name | page_id | data
--------------------------
brand | 83 | brandA
brand | 88 | brandA
brand | 89 | brandA *
type | 89 | typeA *
type | 90 | typeA
type | 98 | typeA
我进入的唯一数据是:
data_name = brand,
data_name = type,
data = brandA,
data = typeA
我需要的是第一个page_id是相同的。所以在这种情况下,89,89是相同的。这就是我想要回归的结果。
我所拥有的几乎是:
SELECT * FROM `data` WHERE (`data_name` = 'brand' AND `data` = 'brandA') OR (`data_name` = 'type' AND `data` = 'typeA')
我可以在PHP中预测结果,但我更愿意在MySQL中找到答案。
有什么想法吗? 感谢
答案 0 :(得分:2)
在这里猜猜......
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(data_name VARCHAR(12) NOT NULL
,page_id INT NOT NULL
,data VARCHAR(12) NOT NULL
,PRIMARY KEY(data_name,page_id)
);
INSERT INTO my_table VALUES
('brand',83,'brandA'),
('brand',88,'brandA'),
('brand',89,'brandA'),
('type',89,'typeA'),
('type',90,'typeA'),
('type',98,'typeA');
SELECT x.page_id
FROM my_table x
WHERE (data_name,data) IN(('brand','brandA'),('type','typeA'))
GROUP
BY page_id
HAVING COUNT(*) = 2;
+---------+
| page_id |
+---------+
| 89 |
+---------+
答案 1 :(得分:1)
在这种情况下,如果您只想显示具有品牌和价值的所有ID
记录,请尝试使用此命令,它会显示您想要已经有TYPE和BRAND的每个ID
SELECT A.page_id
FROM data A
INNER JOIN (SELECT * FROM data ) as B ON B.page_id = A.page_id AND B.data_name != A.data_name
GROUP BY A.page_id
答案 2 :(得分:0)
这应该有效,将表连接到自身:
SELECT
d1.page_id
FROM
(SELECT
pade_id
FROM
`data`
WHERE
data_name = 'type') d1
INNER JOIN
(SELECT
pade_id
FROM
`data`
WHERE
data_name = 'brand') d2
ON d1.page_id = d2.page_id;
答案 3 :(得分:0)
应该有效:
SELECT orig.page_id, second.page_id as s_page_id
FROM `data` as orig, (SELECT * FROM `data` WHERE page_id = orig.page_id AND data_name = 'brand') AS second
WHERE orig.data_name = 'type';