3

8 つのフィールド (sp、lp、gp、sr、zd、md、pr、rs) の値を CONCAT し、結果を「化学」として返したいと考えています。問題は、1 つのレコードが 8 つの可能な値のうち 2 つ (おそらく 3 つまたは 4 つ) の値しか持たず、残りの値が NULL になることです。さらに、値が NULL の場合、前のテキスト (SP:、LP:、GP:、SR: など) も (改行) も表示されないようにします。

ここでの調査から、CONCAT_WS() と IFNULL() に出会いました。希望する結果を得るには、これらの機能を実装するための支援が必要です。

    CONCAT(
      'SP: ', sp, '<br />',
      'LP: ', lp, '<br />',
      'GP: ', gp, '<br />',
      'SR: ', sr, '<br />',
      'ZD: ', zd, '<br />',
      'MD: ', md, '<br />',
      'PR: ', pr, '<br />',
      'RS: ', rs
    ) AS chemistry
4

4 に答える 4

2

ここで 2 つの事実を使用できます。まず、CONCAT (他の多くの SQL 関数と同様) はNULL、引数がNULL;の場合に戻ります。次に、CONCAT_WSは単に値をスキップしNULLます。

これにより、クエリは次のように簡単になります...

CONCAT_WS('<br />',
   CONCAT('SP:', sp),
   CONCAT('LP:', lp),
   ...
) AS chemistry

そうは言っても、このフォーマットをクエリ (データベース) レベルで作成する必要があるのでしょうか。まず、<br />要素を分離するために使用することは、実際には表現の詳細にすぎません。これは、希望するよりもはるかに頻繁に変更される可能性があります。第 2 に、このコードをアプリケーション レベルで記述および調整する方がはるかに簡単な場合があります。たとえば、ループを使用します。

于 2013-09-16T16:16:36.800 に答える
1

各要素を連結して比較する、次のようなものが必要です( ANSI標準であるため、私はそれNULLを好みます):COALESCE()

CONCAT(
  coalesce(concat('SP: ', sp, '<br />'), ''),
  coalesce(concat('LP: ', lp, '<br />'), ''),
  coalesce(concat('GP: ', gp, '<br />'), ''),
  coalesce(concat('SR: ', sr, '<br />'), ''),
  coalesce(concat('ZD: ', zd, '<br />'), ''),
  coalesce(concat('MD: ', md, '<br />'), ''),
  coalesce(concat('PR: ', pr, '<br />'), ''),
  coalesce(concat('RS: ', rs, '<br />'), '')
) AS chemistry;

問題はファイナル'<br />'です。最後の行を含むすべての行に追加しました。本当に必要ない場合は、後で削除することをお勧めしますが、それは少し難しい場合があります。

于 2013-09-16T16:17:00.867 に答える
0

面倒ですが、いつでもこれを行うことができます:

CONCAT(
  ...
  IF(gp IS NULL, '', CONCAT('GP:', gp, '<br/>')),
  ...
)

ここで、クエリに HTML が含まれている場合は、通常、問題が混乱している兆候であることを覚えておいてください。データベースは、プレゼンテーションではなく、データに関係する必要があります。

于 2013-09-16T16:16:50.480 に答える
0

以下を使用できます。

CONCAT(
  IF (sp IS NULL, '', CONCAT('SP: ', sp, '<br />')),
  IF (lp IS NULL, '', CONCAT('LP: ', lp, '<br />')),
  IF (gp IS NULL, '', CONCAT('GP: ', gp, '<br />')),
  IF (sr IS NULL, '', CONCAT('SR: ', sr, '<br />')),
  IF (zd IS NULL, '', CONCAT('ZD: ', zd, '<br />')),
  IF (md IS NULL, '', CONCAT('MD: ', md, '<br />')),
  IF (pr IS NULL, '', CONCAT('PR: ', pr, '<br />')),
  IF (rs IS NULL, '', CONCAT('RS: ', rs))
) AS chemistry
于 2013-09-16T16:16:53.753 に答える