1

タイムシートの送信/承認機能を作成しており、現在、pending.phpページで作業しています。このページでは、マネージャー/管理者がpending.phpにアクセスして、保留中のタイムシートを表示して確認できます...

私のコードは次のとおりです。

list($qh,$num) = dbQuery(
"SELECT start_time, end_time, uid, submitid, submitstatus, submitdate, submitapprover 
FROM $TIMES_TABLE 
WHERE submitstatus=1 
ORDER BY submitid");

現在、その週のすべてのタイムシートエントリが表示されています:

私が本当に必要としているのは、提出された週ごとに1行だけです。基本的に、最初のstart_timeと最後のend_timeを取得し、一緒に作成します(start-end)(start_time --end_time | username | id | submitdate | submit status..etc)

誰かがgroup_catconか何かを使うように私に言ったが、私はそれをよく知らない。

私の写真から私は次のようなものが欲しいでしょう:

2012-12-30 - 2013-01-05 | admin | submitid#### | submitdate | status | approver
2013-01-06 - 2013-01-09 | admin | submitid#### | submitdate | status | approver

私はphp/mysqlにかなり慣れていないので、お詫びします

4

2 に答える 2

1

これらすべての列を使用すると、必要以上に物事が分割されることがあります。たとえば、さまざまな承認者がいます。そのために、クエリから一部を削除することをお勧めします。

select 
  concat(min(start_time), ' - ', max(end_time)), 
  uid, 
  submitid, 
  submitstatus, 
  submitdate, 
  submitapprover
FROM 
  $TIMES_TABLE
WHERE 
  submitstatus=1 
GROUP BY
  uid, 
  submitid, 
  submitstatus, 
  submitdate, 
  submitapprover
ORDER BY 
  submitid
于 2013-01-14T21:29:12.490 に答える
0

私は多くの言語で多くのタイムシートアプリケーションを作成しました。group_concatを使用すると、文字列をコンマで結び付けることができますが、それが必要なことではないと思います。

欠点は、groupbyと一緒に使用する必要があることです。あなたのdb構造からそれはあなたのために働かないかもしれません。

「groupby」のルールは、列の「group by」リストで使用される列を選択するか、その列で集計関数を使用する必要があるというものです。

次の構造のbooks_sold(id、author_id、date、price)を持つbooksテーブルでは、次の操作を実行できます。

select sum(price), author FROM books_sold group by author

著者ごとの本の合計を取得します。

select sum(price), date FROM books_sold group by date

日付ごとに販売された本の合計を取得します。

select group_concat(id), date FROM books_sold group by date

日付ごとに販売されたすべての本のIDを取得します。IDはコンマで区切られます

しかし、あなたはすることはできません

select group_concat(id), date, author FROM books_sold group by date

著者の列では、groupbyや一括操作を行っていないためです。クエリは機能しますが、作成者の列は信頼できません。

これで、db構造から、group_concatを実行しても、必要なフィールドを取得できるとは思いません。承認者が1週間で同じ人でない場合はどうなりますか?承認者の列は意味がありません。提出IDが1週間で同じでない場合はどうなりますか?送信日が1週間全体で同じでない場合はどうなりますか?

それらの列が常に同じである場合は、

select CONCAT(min(start_time), ' - ', max(end_time)), uid, submitid, submitstatus, submitdate, submitapprover FROM $TIMES_TABLE WHERE submitstatus=1 GROUP BY uid, submitid, submitstatus, submitdate, submitapprover ORDER BY submitid
于 2013-01-14T21:44:27.450 に答える