2016-11-04 78 views
2

我必須構建一些複雜的mysql查詢。我有一個包含一些用戶信息的表格,包含3列:id,id_user,id_campo,valore。例如:構建多個MySql查詢條件

  • 1,1,1,「Roberto」(其中id_campo = 1用於用戶名);
  • 2,2,1,「Luca」;
  • 3,1,2,「Windows」; (其中id_campo = 2用於所使用的OS);
  • 4,2,2,「Linux」; 等。

現在,我有選擇的用戶其中:name = 「羅伯託」 和OS =的 「Linux」,但同樣的用戶:

SELECT id_user WHERE (id_campo=1 AND valore="Roberto") OR (id_campo=2 AND valore="Linux"). 

在此示例情況下,查詢返回id_user = 1和id_user = 2,但我不會得到任何結果。如何修改查詢,以便可以包含「同一用戶」的條件?

謝謝!

+2

你知道數據庫建設是錯的,就在同一個表內連接?這不是關係數據庫/表應該如何工作的方式。對於不同的數據,您不使用多列關係使用相同的列。爲什麼你不能獲取匹配'id_user'的行? – junkfoodjunkie

+1

爲什麼'FROM'操作符錯過? – RomanPerekhrest

+0

爲什麼錯了?我有一個用戶表,一個「campo」表和一個「user_spec」表。因此,用戶可以擁有「campo」(「Name」,「OS」,「email」,)中包含的不同user_spec值(「Roberto」,「Luca」,「Windows」,「Linux」 ..)。如果它是錯誤的,我怎樣才能修改數據庫結構的最佳方式?謝謝 – cent89

回答

1

您需要構建兩個「子查詢」,然後通過用戶ID加入它們。

SELECT a.id_user 
from (
    SELECT id_user FROM table 
    WHERE (id_campo=1 AND valore="Roberto") 
) a, 
(
    SELECT id_user FROM table 
    WHERE (id_campo=2 AND valore="Linux") 
) b 
WHERE a.is_user = b.id_user 
1

你有一個錯誤的數據庫設計,但無論如何你可以usie基於id_user

select a.id_user, a.id_campo, a.valore 
    from my_table as a 
    inner join my_table as b on .id_user = b-id_user 
    where (a.id_campo = 1 and a.valore ='Roberto') 
    AND (b.id_campo = 2 and b.valore ='Linux')