[英]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.