簡體   English   中英

Laravel DB選擇語句。 查詢返回列名作為結果而不是值

[英]Laravel DB select statement. Query returns column name as result rather than values

更新:下面是針對上下文,但我發現這不是問題所在。

我是php和laravel的新手。 我對使用存儲庫中的PostgreSQL查詢的控制器進行AJAX調用。 該查詢是一個選擇查詢,它具有日期列,total_sms和demo(演示是性別Male / Female)。

我有一個數組$ return []下面是一個foreach($ result為$ day)。 最后,數組在返回之前會轉換為json。

$return[$day->dated][$day->demo] = $day->total_sms;

我期望上面將日期插入為具有數組值的鍵,將性別(男性和女性)作為內部數組的鍵,它們將數組作為值,並且這些數組將包含total_sms值。 (那句話一定很令人困惑...)

但是結果是:

{2017-07-03: {d.gender: "0"}, 2017-07-04: {d.gender: "0"}}

我將如何構建一個像這樣的數組:

{2017-07-03: {Male: "0" , Female: "10"}, 2017-07-04: {Male: "0", Female: "0"}

雖然我認為以上內容實際上不是我最初的描述方式? 我打算對其進行解碼,並將信息粘貼到帶有以下內容的chart.js圖表​​中:

$.each(d, function(date, value) {
   window.barChart.data.labels.push(date);
      $.each(d.date, function(demographic, value) {
            // ALWAYS ASCENDING DATA

});

更新:正在創建問題的代碼。

我在存儲庫中有一個查詢,該查詢可以插入不同的參數,以更改使用的人口統計信息。 下面是我在pgAdmin中使用的版本,它工作正常。

SELECT d.date dated, count(se.id) total_sms, demo
FROM    (
    select to_char(date_trunc('day', (current_date - offs)), 'YYYY-MM-DD') AS date, demographic.gender as demo
    FROM generate_series(0, 365, 1) AS offs
    CROSS JOIN (SELECT DISTINCT gender FROM common.profile) AS demographic
    ) d
LEFT OUTER JOIN (
    SELECT id, customer_id, client_report.insert_time, profile.gender, profile.house_income, profile.address AS postcode, profile.age AS age_group, profile.is_employed, profile.is_married, profile.no_children, profile.no_cars, profile.shopping_frequency
    FROM common.client_report
    JOIN common.profile
    ON client_report.profile_id = profile.uuid 
    WHERE sms_status = 'SUCCESS' AND customer_id = 5::int
    ) se
ON (d.date=to_char(date_trunc('day', se.insert_time), 'YYYY-MM-DD')) AND demo = gender
WHERE d.date::date BETWEEN '2017-07-01'::date AND '2017-08-01'::date
GROUP BY d.date, demo
ORDER BY d.date, demo ASC;

凡是指出性別的地方,日期或AND customer_id =后的5都是從命名參數生成的(當我收到錯誤消息時,我通常可以解決這一問題,當沒有錯誤時,代碼可以工作,但是我將性別作為列名[ 'de.gender']而非值['Male','Female'])。 我的意思是說我在參數方面存在錯誤,不再相信這可能是問題所在。 然后,我將因缺少文本未知的轉換工具而收到錯誤消息。 我不完全了解這一點,但我知道這意味着我必須使用:: text將性別轉換為文本。 這樣做會導致出現列名。 但是,在沒有交叉聯接的情況下,在另一種更簡單的查詢中執行此操作,結果是正確的。 這使我相信查詢的方式存在問題,或者數據庫驅動程序和這些查詢存在錯誤。

更新:做了一個測試,應該早點做! 將不帶參數的版本放入我的應用程序,使函數運行,並完全按照需要返回。 因此,這源於參數,也可能來自定義表的參數,例如de.gender(表為de)

更新:另一個測試:

CROSS JOIN (SELECT DISTINCT gender FROM common.profile) AS demographic

在這行代碼中,性別是一個命名參數(:demograph)。 但是,如果我將其更改為簡單的性別,則在使用“男性,女性”值時,結果將與預期的一樣。 如果將其保留為參數,則似乎正在創建許多“性別”字符串,而不是獲取“男性”,“女性”值。

更新:今天做了很多學習,命名或位置參數僅用於值。 意思是所有輸入都用雙引號引起來,這就是為什么我要創建“性別”字符串而不是男性,女性的原因。

我不知道我不確定你的問題

$testArray = array(
            "2017-07-03" => array("male" : "0","female" => "10"),
            "2017-07-04" => array("male" : "0","female" => "0")
    );
    return $testArray;

暫無
暫無

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

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