2017-07-22 26 views
1

私はSQLとPHPを初めて使用しています。私は、エンドユーザがHTMLフォームにテキストを入力する必要があります。これは、MySQLデータベースに格納しています。後で、ユーザーデータを持つdb内のすべてのテーブルにクエリを実行し、連結された文字列を取得します。私はこのクエリで特定のIDに基づいて、1つの文字列のみを連結することができるよ今Click for ImageMySql列を連結して連結した文字列を作成する

:ここに明確に理解するため

は私のデータの画像および所望の結果である

私に結果を与える
select group_concat(text order by T.did separator ' ') as TTT 
from (
    select l.dimgroupid as did, d.*, l.dimlevelid as id, l.dimlevelvalue, 
    concat(d.dimensiontext," ",l.dimlevelvalue) as text 
    from dimensionlevel l 
    join dimension d on d.dimensionid = l.dimid 
    join dimensiongroup g on g.groupid = l.dimgroupid) as T 
where T.id=0; 

| TTT       | 
-------------------------------- 
| A 20 year old Man is Fresher | 

私はID上でループを使うことができますが、問題はIDが固定されていないことです。

注:「n」個の寸法とレベルがあります。ここで

は私が照会しようとしているデータのSQLフィドルです:SQL Fiddle

+0

SQLクエリ。あなたは 'group by 'を使うことはできませんし、次元数(文章の長さ)を無制限にすると、' join'を使うことはできません。そして、結果セットはかなり速く大きくなるかもしれません。また、あなたは現在あなたの現在のクエリであなたのIDを変更するだけで、すべての文を得ることができるのかと疑います。しかし、事前にどれくらいの数があるかを知らなくても、そこですべてのグループ、レベル、idをループするだけで簡単にPHPで行うことができるはずです。 – Solarflare

+0

ありがとうございます。はい、Dimensionsと同じ考えをしていましたが、出力を得るレベルが固定されていません。私はPHPを使用してそれを取り除くことができるかどうかを知らせます。 – Shades

+0

完全性のために:mysqlのループももちろん使用できます(ストアドプロシージャなど)。PHPで行う必要はありません。すべてのレベルでデータを結合することによって、(一時的に)テーブルに(潜在的に大きな)結果を作成する必要があります。実際のテーブルにデータを格納することを目的としている場合は、これが適切な解決策である可能性があります。また、phpまたはmysqlの両方でdynamic sql(aループを使用して結合を構築する)を使用することもできます。また、他のデータベース(ポストグルのような)はこれに(再帰をサポートするので)これを行うことができます。しかし、(私はまだ考えていますが)あなたはMySQLの単一の通常のクエリでそれを行うことはできません。 – Solarflare

答えて

0

私はあなたが望むものを得るためにあなたのクエリを編集した。..

select did as groupid, group_concat(text order by dimensionid separator ' ') as TTT 
    from ( 
      select l.dimgroupid as did, d.*, l.dimlevelid as id, l.dimlevelvalue, concat(d.dimensiontext," ",l.dimlevelvalue) as text 
      from dimensionlevel l 
      join dimension d on d.dimensionid = l.dimid 
      join dimensiongroup g on g.groupid = l.dimgroupid 
     ) as T 
    group by id; 

私はこれがあなたの役に立てば幸い...

UPDATE:PHPを使用して ...

$sql = "SELECT `dimensionid`, `dimensiontext`, `dimensiondescr` FROM `dimension`"; 
$dimensions = mysqli_fetch_all (mysqli_query($con, $sql)); 

$sql = "SELECT `dimlevelvalue` FROM `dimensionlevel` WHERE dimid IN (SELECT dimensionid FROM dimension WHERE dimensiondescr='age') "; 
$ages = mysqli_fetch_all (mysqli_query($con, $sql)); 

$sql = "SELECT `dimlevelvalue` FROM `dimensionlevel` WHERE dimid IN (SELECT dimensionid FROM dimension WHERE dimensiondescr='sex') "; 
$sexes = mysqli_fetch_all (mysqli_query($con, $sql)); 

$sql = "SELECT `dimlevelvalue` FROM `dimensionlevel` WHERE dimid IN (SELECT dimensionid FROM dimension WHERE dimensiondescr='experience') "; 
$experiences = mysqli_fetch_all (mysqli_query($con, $sql)); 

foreach ($ages as $age) { 
    foreach ($sexes as $sex) { 
     foreach ($experiences as $exp) { 

      foreach ($dimensions as $dimension) { 
       $putage = ""; 
       $putsex = ""; 
       $putexp = ""; 
       if($dimension[2]=="Age"){ 
        $putage = $age[0]; 
       }elseif($dimension[2]=="Sex"){ 
        $putsex = $sex[0]; 
       }elseif($dimension[2]=="Experience"){ 
        $putexp = $exp[0]; 
       } 
       echo $str = $dimension['1']." ".$putage.$putsex.$putexp." " ; 
      } 
      echo "<br>"; 
     } 
     echo "<br>"; 
    } 
} 
私はあなたがこれを行うことができるとは思わない
+0

ありがとうございます。そうですね、私はそのフォーマットで必要ですが、私は画像に示されているようにすべての組み合わせが必要です。固定セットではありません。私はすべての可能性が必要です。私が話していることのアイデアを得るために、画像から最終的な出力表を参照してください。 – Shades