2010-08-14 61 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

相關問題