2012-07-12 141 views
0

我有以下表命名attributes其他列選擇列

| identifier | attribute | value  | 
|------------|-----------|------------| 
| 23   | myKey  | myValue | 
| 24   | hisKey | hisValue | 
| 25   | herKey | herValue | 
| 23   | otherKey | otherValue | 

我想打它選擇上述行SQL SELECT查詢,通過他們的識別符組他們,並使用attribute爲重點和作爲密鑰的值爲value

這意味着,它看起來像上面的表,應該變成下面的PHP數組:

Array 
(
    [0] => Array 
     (
      [identifier] => 23 
      [myKey] => myValue 
      [otherKey] => otherValue 
     ) 

    [1] => Array 
     (
      [identifier] => 24 
      [hisKey] => hisValue 
     ) 

    [2] => Array 
     (
      [identifier] => 25 
      [herKey] => herValue 
     ) 

) 

我曾嘗試下面的SQL查詢:

SELECT attributes.value as atttributes.attribute FROM attributes GROUP BY identifier

這將給出以下錯誤:

Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.attribute FROM attributes GROUP BY identifier' at line 1'

D任何人都知道如何做到這一點?

+2

爲什麼你不能循環訪問記錄並使用PHP構建該數組? – 2012-07-12 17:58:47

+0

我不知道你在找什麼SQL輸出。請舉一個例子。 – RedFilter 2012-07-12 18:02:54

+0

我可以。那沒問題。我只是認爲用SQL查詢來做它會更好,甚至可以提供更好的性能。 – simonbs 2012-07-12 18:03:34

回答

1

您的錯誤來自輸入錯誤。不要在別名中指定表。

SELECT attributes.value as atttributes.attribute FROM attributes GROUP BY identifier

這裏的修正:

SELECT attributes.value as attribute FROM attributes GROUP BY identifier 

但是,它不會得到你想要的,你想要的。 MySQL將總是返回每行中具有相同列數的結果。

你需要在循環代碼中實現它。而不是GROUP BY,使用ORDER BY,並且每當標識符更改時,啓動另一個數組。

+0

我確實有一個錯字。但是,當錯字糾正後,我會得到同樣的錯誤。似乎我需要在代碼中執行此操作:-) – simonbs 2012-07-12 18:09:14

+0

@SimonBS,Oops,另外,不要在別名中指定表名。 :) – 2012-07-12 18:13:52

1

答案是你不能用合理的方式用SQL來做到這一點。