2017-07-22 81 views
1

我是SQL和PHP的新手。我有一個要求,最終用戶在HTML表單中輸入文本,我將其存儲在MySQL數據庫中。之後,我查詢db中具有用戶數據的所有表以獲得連接字符串。MySql通過列循環以形成連接字符串

爲了更清楚地瞭解這是我的數據的圖像和期望的結果:Click for Image

現在我可以基於此查詢特定ID來連接只有一個字符串:

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來獲得你當前查詢的所有句子(並且它缺少我認爲的順序)。但是你應該可以在php中相對簡單地完成它,因爲你可以簡單地循環遍歷所有的組,層和id,而不必知道事先會有多少。 – Solarflare

+0

謝謝。是的,我也認爲與維度相同,並且級別並不固定以獲得輸出。我會讓你知道,如果我能夠使用PHP來關閉它。 – Shades

+0

只是爲了完整:您當然也可以在mysql中使用循環(例如在存儲過程中),您不必在php中執行它們。這將需要您通過將數據與其自身的每個級別相結合來在(臨時)表中創建(可能較大的)結果。如果您的意圖是將數據放在實際的表格中,這可能是一個合適的解決方案。你也可以在php或mysql中使用動態sql(使用循環構建連接)。其他數據庫(如postgres)也可以這樣做(因爲它們支持遞歸)。但是(我仍然認爲)你不能在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