簡體   English   中英

postgresql 到 php 數組,以列為索引

[英]postgresql to php array with column as a index

不確定這是否可行,但我需要從 postgresql 查詢中返回一個 json 對象

說查詢返回這樣的東西

who       count
=================
mary      2
had       9
a         12
lamb      9

數據庫有 2 列“who”和“count”,我需要一個直接從 postgresql 返回的 json 對象,該對象解碼為此

index   value
---------------
mary    2
had     9
a       12
lamb    9

所以數組的索引將來自“who”列,該數組元素的值將來自“count”列

換句話說,列“who”將是數組的索引,而列“count”將是該數組的值

全部存儲在一個漂亮的小 json 輸出中

我相信這是可以做到的,當有人指出時我會覺得很愚蠢,但我還沒有弄清楚這一點..

有任何想法嗎?

我知道你可以很容易地用 php 循環來完成它,但我只想從數據庫中返回它,而沒有凌亂的 for 循環內容

謝謝

jsonb_object_agg()將做到這一點:

我的表:

| who   | count |
| ----- | ----- |
| mary  | 2     |
| had   | 9     |
| a     | 12    |
| lamb  | 9     |


SELECT
    jsonb_object_agg(col_a, col_b) AS joa
FROM myTable;

此查詢將返回具有 json 值的單行:

    {
        "a": 12,
        "had": 9,
        "lamb": 9,
        "mary": 2
    }

而在 PHP 中,你只需要解碼它:

   $myTable = $PDO -> fetchColumn();
   $myTableArray = json_decode($myTable);

值得指出的是, jsonb_object_agg() 返回唯一鍵。 所以如果我們INSERT INTO myTable(who, count) VALUES ('mary', 3)上面的查詢仍然會返回 4 行。 這還不錯,因為您打算將它們用作數組鍵,請記住,您需要控制 myTable.who 中的重復值。

干杯!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM