标题可能不够清晰,但并不知道更好的说法。
问题在于我有一张名为Partij
的表格,其中包含idPartij
和Moederpartij
。列Moederpartij
将指向idPartij
(因此我们可以创建Mother -> Child
关系。)
这是我到目前为止的查询:
SELECT
P.idPartij,
P.Partijnaam,
P.Gewicht,
PER.Perceel,
P.Moederpartij
FROM Partij AS P
LEFT OUTER JOIN Perceel AS PER ON P.idPerceel = PER.idPerceel
WHERE P.Actief = 1
ORDER BY
P.Moederpartij ASC,
P.Partijnaam ASC
这导致以下输出:
360 | 34 Avarna 13-1V | | 0
280 | 36 Agata 13-1V | | 0
160 | 37 Excellency 13-1V | | 0
140 | 38 Erika 13-1V | | 0
300 | 39 Rosagold 13-1V | | 0
240 | 40 Fontane 13-2V | | 0
200 | 41 Fontane 13-1V | | 0
220 | 42 Fontane 13-3V | | 0
180 | 45 Spunta 13-3V | | 0
260 | 46 Arnova 13-1V | | 0
400 | 43 Spunta 13-2V | | 180
380 | 44 Spunta 13-1V | | 180
320 | 35 Altus 13-1V | | 260
340 | 47 Arizona 13-1V | | 260
但我试图获得以下输出:
360 | 34 Avarna 13-1V | | 0
280 | 36 Agata 13-1V | | 0
160 | 37 Excellency 13-1V | | 0
140 | 38 Erika 13-1V | | 0
300 | 39 Rosagold 13-1V | | 0
240 | 40 Fontane 13-2V | | 0
200 | 41 Fontane 13-1V | | 0
220 | 42 Fontane 13-3V | | 0
180 | 45 Spunta 13-3V | | 0
400 | 43 Spunta 13-2V | | 180
380 | 44 Spunta 13-1V | | 180
260 | 46 Arnova 13-1V | | 0
320 | 35 Altus 13-1V | | 260
340 | 47 Arizona 13-1V | | 260
这样你首先得到Mother (Moederpartij)
然后得到所有Childs
,依此类推......
这在单个查询中是否可行,或者我应该通过记录在PHP中循环获取每条记录的所有子项吗?
编辑1
正在运行的数据库是MariaDB
。
答案 0 :(得分:1)
我不确定我是否理解你的问题,但是#34; Avarna 13-1V"例如,完整的聚会名称和你称之为的母亲是#34; Avarna"?
即。你想要所有的Spuntas,Fontanes等,但它们也包含13-1V,13-2V等等,这是什么抛出它?
您可以先按照第一个单词排序(找到空格分隔符,然后单击左侧),然后按照主方字段排序。例如。像这样的东西:
左命令(Partijnaam,LOCATE('',Partijnaam) - 1),Moederpartij
但是,如果是这样的话,为什么不将文本名称和13-v1等分成不同的列呢?
(MySQL的)
答案 1 :(得分:1)
试试这个。我在select查询中添加了一列,并根据它进行了排序。由于我没有MariaDB没有测试过查询,但我确信它会解析你的查询。
SELECT
P.idPartij,
P.Partijnaam,
P.Gewicht,
PER.Perceel,
P.Moederpartij,
case when P.Moederpartij =0 then
Concat(P.idPartij ,"-", "0","-", P.idPartij )
else
Concat(P.Moederpartij ,"-", "9","-", P.idPartij )
end sorder
FROM Partij AS P
LEFT OUTER JOIN Perceel AS PER ON P.idPerceel = PER.idPerceel
WHERE P.Actief = 1
ORDER BY
sorder Asc