Php 显示数据库中列中的重复和非重复数据-laravel

Php 显示数据库中列中的重复和非重复数据-laravel,php,laravel,Php,Laravel,在我的数据库中,我有一个从客户那里收集的响应列表,我想收集这些响应并生成一个饼图。(就像谷歌表单一样) 在我的数据库中,我的回答与下面的相同,但与下面的不同 Client 1 Client 2 Client Yes Yes No Yes : 2 , No: 1 因此,在上面的专栏中,我有Yes(2)和No(1)。我想收集、计数和显示我的查询响应,如下所示 Client 1 Client 2 Client Yes Yes

在我的数据库中,我有一个从客户那里收集的响应列表,我想收集这些响应并生成一个饼图。(就像谷歌表单一样)

在我的数据库中,我的回答与下面的相同,但与下面的不同

Client 1   Client 2    Client
  Yes        Yes         No
Yes : 2  , No: 1
因此,在上面的专栏中,我有
Yes(2)和No(1)
。我想收集、计数和显示我的查询响应,如下所示

Client 1   Client 2    Client
  Yes        Yes         No
Yes : 2  , No: 1
但我的代码如下

 public function answers_chart(Survey $survey)
   {
         $response = DB::select( DB::raw(" select * from (
          SELECT questionnaire_id, COUNT(answer) as e_count
          FROM Answer
          GROUP BY answer
          )a where  a.e_count > 1)); 
   }
我得到的响应如下所示,这意味着它只计算
Yes

[{"e_count":2}]
我怎样才能做到这一点

表格

公共职能


您的a.e_计数大于1。这意味着“按答案分组”中只有1个“否”,而您只需要包含1个以上“否”或“是”的组。您应该删除
a,其中a.e\u count>1)


不过,我强烈反对这样做。Laravel有一个强大的内置雄辩ORM。为了更好地使用Laravel框架,请查看它

例如,可能使用case stations会更好

SELECT
COUNT(CASE WHEN answer = '1' THEN 1 END) AS yes,
COUNT(CASE WHEN answer= '0' THEN 1 END) AS no
FROM ANSWER
试试这个:

Model::select(DB::raw("COUNT(CASE WHEN answer = 'Yes' THEN 1 END) AS e_count"))->first(); // Eloquent approach

DB::table('answer')->select(DB::raw("COUNT(CASE WHEN answer = 'Yes' THEN 1 END) AS e_count"))->first(); // Query Builder approach

在问题中添加表的模式。@DsRaj,我已经添加了魔鬼的模式广告:我非常鼓励这样做查询。它使您的代码框架独立,而且可能更快,因为您不需要加载整个ORM来进行相对简单的选择。如果这是数据库中唯一的表,我必须同意,但从长远来看,在更大的项目中使用此模式会带来不便。不过,我不知道斯威茨的项目有多大。我想这就是我的品味。这一点很有道理,但它不能满足我独立于框架的需要:)如果回答不是“是”或“否”,这个查询将如何?我添加了“是”或“否”作为回答的示例,这些回答可能是相同的。您可以自己添加“否”答案的计数,这样您会得到更好的答案