【问题标题】:How to sort perfectly a select from a mysql database如何从 mysql 数据库中完美排序选择
【发布时间】:2014-01-19 16:05:32
【问题描述】:

我的问题是关于从 Mysql DB 中提取。

在我的数据库中,我有来自计算机的库存流程。 这是我的数据库中的一个示例。

ID      CMD                PID     PPID
1000    /usr/sbin/httpd    9260    12600
1001    /usr/sbin/httpd    9261    12600
1002    /usr/sbin/httpd    9262    12600
1003    /usr/sbin/httpd    9263    12600
1004    /usr/sbin/httpd    12600    50

好的,我只想选择行:

1004    /usr/sbin/httpd    12600    50

其实我的代码PHP选择了5行。

但是现在我想在它们之间放置一个 php 代码来选择不是由父进程创建的 CMD。 在示例中,PPID 为 50 的行是好的,她的父进程不在这里。

我真的不知道我能做什么,但这是我的例子。

SELECT ID, CMD
WHERE cmd LIKE %httpd% AND IF ppid IS NOT EQUAL TO OTHER ppid WHICH HAVE THE SAME cmd;

我希望你能帮助我。 对不起,我的问题很复杂,我不好解释。

【问题讨论】:

  • 请解释更多...
  • 50 不是父进程吗?
  • @Anubhav 对不起,我真的不擅长解释这个,因为它对我来说太复杂了:s
  • @tofuhim 是的 50 是 httpd 的父进程,在某些情况下父进程(PPID)是 1,因为它是 INIT,而在其他一些时候我们得到了 inception ... fork fork fork fork
  • 还需要考虑您有单个子实例的可能性,例如 (1005, '/usr/sbin/httpd', 50, 77);

标签: php mysql sql fork pid


【解决方案1】:

您必须在 Inventory 中找到没有父项的项目。为此,您必须对具有父项的项目执行子查询。这应该可以解决问题。这也说明了独生子女的可能性。

SELECT i.*
FROM Inventory i
LEFT JOIN
  (-- with parents in Inventory
  SELECT k.PID
  FROM Inventory j
  JOIN Inventory k ON k.PPID = j.PID) l ON l.PID = i.PID
WHERE l.PID IS NULL

http://sqlfiddle.com/#!2/d12c1/15

【讨论】:

    【解决方案2】:

    这样的?

    SELECT ID, CMD
    WHERE cmd LIKE %httpd%
    GROUP BY ppid
    HAVING COUNT(ppid) = 1
    

    【讨论】:

    • 如果只有一个子进程怎么办?
    • 谢谢,你和@Suresh Kamrushi 很快就得到了很好的答案,你能(也)解释一下这个“GROUP BY ppid”是如何工作的......
    • @Arlaud Pierre 与“HAVING COUNT(ppid) = 1 它不起作用。
    • @user3114471 谷歌上的第一个链接:electrictoolbox.com/mysql-group-by-having
    【解决方案3】:

    像这样对表进行自联接:

    SELECT i.ID, i.CMD,iPID,i.PPID from inventory i,inventory j WHERE i.PID <> j.PPID
    

    在上面的例子中inventory是表名(假设)。

    【讨论】:

    • 我不认为这完全符合您的想法 - 尽管我认为它在正确的轨道上。
    【解决方案4】:

    试试这样:

    SELECT ID, CMD WHERE cmd LIKE '%httpd%' GROUP BY cmd;
    

    【讨论】:

    • 我不知道你是如何制作这个魔法的,但它确实有效。你能解释一下吗?
    猜你喜欢
    • 2016-12-17
    • 2021-01-12
    • 2018-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多