我有一个包含3个cols的表,增加了id,name和data
我想要实现的目标
您输入$ name ...并返回$ data ...
然后
它需要$ data并查找具有相同$ data的所有$ name。
SELECT * FROM table WHERE name ='$name' data='$data' and data!='0'
似乎没有削减它..
我基本上试图获取与输入的$ name的$ data具有相同数据的所有行。
提前感谢。
答案 0 :(得分:2)
SELECT * FROM table WHERE name ='$name' and data='$data' and data!='0'
您错过了and
编辑:
select * from table where
name in
( select data from table where name = '$name' )
答案 1 :(得分:2)
如果您必须在一个查询中执行此操作,请尝试自行加入表格:
SELECT * FROM table t1,table t2 WHERE t1.name = '$name' AND t1.data=t2.data AND t1.name != t2.name
或者,使用嵌套查询:
SELECT name FROM table WHERE data IN (SELECT data FROM table WHERE name='$name')
我推荐嵌套查询。它更容易阅读。
您发布的原始查询有什么问题,因为您错过了“与”。但它也不会按照你想要的那样做。
答案 2 :(得分:1)
您可能需要尝试以下操作:
SELECT t2.name
FROM `table` t1
JOIN `table` t2 ON (t2.data = t1.data)
WHERE t1.name = '$name' AND t1.data != '0';
测试用例:
CREATE TABLE `table` (id int, name varchar(10), data varchar(10));
INSERT INTO `table` VALUES (1, 'name1', 'data-a');
INSERT INTO `table` VALUES (2, 'name2', 'data-b');
INSERT INTO `table` VALUES (3, 'name3', 'data-a');
INSERT INTO `table` VALUES (4, 'name4', 'data-b');
INSERT INTO `table` VALUES (5, 'name5', 'data-a');
结果:
SELECT t2.name
FROM `table` t1
JOIN `table` t2 ON (t2.data = t1.data)
WHERE t1.name = 'name2' AND t1.data != '0';
+-------+
| name |
+-------+
| name2 |
| name4 |
+-------+
2 rows in set (0.00 sec)
嵌套查询解决方案suggested by @Borealid是另一个返回相同结果的有效解决方案:
SELECT name
FROM `table`
WHERE data IN (SELECT data FROM `table` WHERE name = 'name2');
+-------+
| name |
+-------+
| name2 |
| name4 |
+-------+
2 rows in set (0.00 sec)