2010-08-14 59 views
3

我有一个表3周的cols,incremeting ID,名称和数据PHP的MySQL可选择全部具有相同的数据

我想要实现

你输入一个$名称...返回$ data ...
then 它需要$ data并找到所有具有相同$数据的$名称。

SELECT * FROM table WHERE name ='$name' data='$data' and data!='0' 

似乎并没有削减它..

基本上,我试图让具有相同的数据作为输入$名字的$数据的所有行。

在此先感谢。

回答

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) 
+0

这些都似乎没有工作.. 可能是这可以帮助... $ similar = mysql_query(“SELECT * FROM table WHERE name = '$名称'“); ($ row = mysql_fetch_array($ similar)) //上述代码工作 { \t echo“

”。 $ row ['name']。“

”; \t echo“{$ row ['data']}”; 但现在我想选择包含与我输入的名称相同的数据的所有其他名称字段。 //主要问题是它只是返回我输入的名称的数据..不具有相同数据的其他名称.. //如果我困惑你..对不起..不必回答我..谢谢 – hann 2010-08-14 01:12:06

+0

@hann:但是我给你的例子是什么?...在​​我的例子中,用户输入'name2'作为'$ name'。现在'name2'具有'data-b',它由'name4'共享,所以查询返回'name2'和'name4'。这是正确的吗? – 2010-08-14 01:24:39

+0

谢谢..丹尼尔.. idk我怎么没看到它.. – hann 2010-08-14 01:36:53

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

我做到了这一点,似乎没有工作.. – hann 2010-08-14 00:42:07

+0

对不起,我只改正了你的原始查询,但这个新的编辑应该工作,假设我理解你的问题 – 2010-08-14 00:47:43

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')

我推荐嵌套查询。它更容易阅读。

您发布的原始查询出了什么问题,因为您缺少'AND'。但它也不会做你说你想要的。

+1

你有一个小的语法错误。 'WHERE'应该在'LEFT JOIN'之后。不过,我不认为这是OP正在寻找的东西。您的嵌套查询解决方案虽然是好的:) – 2010-08-14 00:43:56

+0

嵌套工作正常..感谢borealid – hann 2010-08-14 01:40:05

相关问题