Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按第2列排序,按第1列分组_Sql_Parent Child_Mariadb - Fatal编程技术网

Sql 按第2列排序,按第1列分组

Sql 按第2列排序,按第1列分组,sql,parent-child,mariadb,Sql,Parent Child,Mariadb,也许标题不够清楚,但不知道更好的表达方式 问题是我有一个名为Partij的表,它有一个idPartij和一个Moederpartij。列Moederpartij将指向idPartij(因此我们可以创建一个母亲->子女关系) 这是我到目前为止提出的问题: SELECT P.idPartij, P.Partijnaam, P.Gewicht, PER.Perceel, P.Moederpartij FROM Partij AS

也许标题不够清楚,但不知道更好的表达方式

问题是我有一个名为
Partij
的表,它有一个
idPartij
和一个
Moederpartij
。列
Moederpartij
将指向
idPartij
(因此我们可以创建一个
母亲->子女关系)

这是我到目前为止提出的问题:

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
但我试图获得以下输出:

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
所以你首先得到母亲(Moederpartij)
,然后是所有的孩子,依此类推

这在一个查询中是可能的,还是我应该在PHP中循环遍历记录并获取每个记录的所有子项

编辑1
运行此操作的数据库是一个
MariaDB

我不确定我是否理解你的问题,但是“Avarna 13-1V”是比如派对的全名,而你称之为“Avarna”的母亲吗

也就是说,你想要所有的喷泉、方丹等都放在一起,但它们也包含13-1V、13-2V等,这就是它的缺点

您可以先按第一个单词排序(找到空格分隔符并在其左边),然后按“母亲参与方”字段排序。例如,类似这样的事情:

按左排序(Partijnaam,LOCATE(“”,Partijnaam)-1),Moederpartij

但是如果是这样的话,为什么不把文本名和13-v1等分成不同的列呢


(MySQL)

试试这个。我在select查询中添加了一列,并根据它进行排序。因为我没有测试程序,所以我没有测试这个查询,但我确信它可以解决您的查询

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

您想在哪个数据库中实现Oracle/SQL Server/MySQL?@Aravintkhanna,它是一个
MariaDB
服务器。很抱歉没有指出这一点!关于党的名称,你说得对。大多数时候他们需要在一起,但是。。。他们并不总是紧密地联系在一起。这就是为什么我使用< <代码>母版< /代码>关系>代码> ID …这是更多的工作,但是如果你将长期使用这些数据,你可以考虑把母亲和孩子们分解成他们自己的独立表,然后把它们与外键联系起来。然后,您可以连接表&对数据做更多的处理,而不必担心字符串操作。您现在在两列之间将它们链接在一起的方式更像是一个链表,就像每个表都有一个特定的后继表一样。你真的只是想要分组,听起来像。按照order by操作字符串将有助于实现这一点,但以关系方式定义这些关系始终是最佳实践。这确实是更好的处理方法,我已经考虑过了,并在这里与其他开发人员讨论过。但这将是一个很大的工作,因为这个表也用于许多其他产品。所以我希望有一种“干净”的SQL方式,在我在PHP脚本中使用它之前……数据量是什么样的?如果有很多记录,那么PHP方法可能效率低下&在PHP服务器上很难实现。我刚才想到的另一个选择是,可以在ID上的表上向母亲写入一个自联接,然后提取Partijnaam字符串中左两个整数的MIN,并对该字段进行排序。不管怎样,我认为你最好的选择是字符串操作操作符!这确实是我要找的地方!它是开箱即用的。非常感谢你!