小编Set*_*ley的帖子

这些SQL闭包表示例有什么区别?

我在围绕SQL闭包表时遇到了一些困难,并希望在理解我找到的一些示例时提供一些帮助.

假设我有一个sample_items带有以下分层数据的表:

id   name                   parent_id
1    'Root level item #1'   0
2    'Child of ID 1'        1
3    'Child of ID 2'        2
4    'Root level item #2'   0
Run Code Online (Sandbox Code Playgroud)

树结构应该是这样的:

id
| - 1 
|   | - 2
|       | - 3
| - 4
Run Code Online (Sandbox Code Playgroud)

为了便于查询树(例如找到特定id的所有后代),我有一个表,sample_items_closure使用Bill Karwin在这个优秀的SO帖子中描述的方法.我还使用可选path_length列来在需要时查询直接子或父.如果我正确理解这个方法,我的闭包表数据将如下所示:

ancestor_id   descendant_id   path_length
1             1               0
2             2               0
1             2               1
3             3               0
2             3               1
1             3               2
4             4               0
Run Code Online (Sandbox Code Playgroud)

sample_items …

mysql tree recursion hierarchical-data transitive-closure-table

7
推荐指数
1
解决办法
1337
查看次数

如何在 PHP 中比较二进制字符串形式的 IP 地址?

我目前正在一个基于 PHP 的项目中使用 IPv4 和 IPv6 地址,并且我需要能够比较两个 IP 以确定哪一个数字更大。例如,192.168.1.9 大于 192.168.1.1。为了做到这一点,我使用inet_ptonunpack将 IP 转换为二进制字符串(我熟悉ip2long,但它仅限于 IPv4)。

这种方法一开始似乎工作正常,但我很快发现,当我将任何以 .32 结尾的 IP 与较低的 IP 地址进行比较时,我得到的结果不正确。例如,如果我将 192.168.1.0 与 192.168.1.32 进行比较,我的脚本会告诉我 192.168.1.0 大于 192.168.1.32。仅当其中一个 IP 以 0.32 结尾时才会发生这种情况。IP 的前三个八位字节可以更改,结果是相同的。

以下 PHP 代码生成一个说明此问题的页面:

// Loop through every possible last octet, starting with zero
for ($i = 0; $i <= 255; $i++) {

    // Define two IPs, with second IP increasing on each loop by 1
    $IP1 = "192.168.1.0";
    $IP2 = "192.168.1.".$i; …
Run Code Online (Sandbox Code Playgroud)

php ipv4 ipv6 inet

5
推荐指数
1
解决办法
2460
查看次数