我是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
我不認爲你可以在做到這一點SQL查詢。沒有數字標識一個句子的所有元素,所以你不能使用'group by',並且使用無限維數(句子長度),你不能使用'join'。結果集可能會相當大。另外我懷疑你現在可以通過改變你的id來獲得你當前查詢的所有句子(並且它缺少我認爲的順序)。但是你應該可以在php中相對簡單地完成它,因爲你可以簡單地循環遍歷所有的組,層和id,而不必知道事先會有多少。 – Solarflare
謝謝。是的,我也認爲與維度相同,並且級別並不固定以獲得輸出。我會讓你知道,如果我能夠使用PHP來關閉它。 – Shades
只是爲了完整:您當然也可以在mysql中使用循環(例如在存儲過程中),您不必在php中執行它們。這將需要您通過將數據與其自身的每個級別相結合來在(臨時)表中創建(可能較大的)結果。如果您的意圖是將數據放在實際的表格中,這可能是一個合適的解決方案。你也可以在php或mysql中使用動態sql(使用循環構建連接)。其他數據庫(如postgres)也可以這樣做(因爲它們支持遞歸)。但是(我仍然認爲)你不能在MySQL中進行單個正常查詢。 – Solarflare