perf: mysql递归查询兼容处理
This commit is contained in:
@@ -8,6 +8,7 @@ DB_PASS = 14Xi17NIK8V2qAXE8oMataHEsaR8lE
|
|||||||
DB_PORT = 3306
|
DB_PORT = 3306
|
||||||
DB_CHARSET = utf8mb4
|
DB_CHARSET = utf8mb4
|
||||||
DB_PREFIX = ow_
|
DB_PREFIX = ow_
|
||||||
|
DB_VERSION = 8
|
||||||
|
|
||||||
DEFAULT_LANG = zh-cn
|
DEFAULT_LANG = zh-cn
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,10 @@ class ArticleCategoryValidate extends Validate
|
|||||||
if ($value == 0) {
|
if ($value == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$children = [];
|
||||||
$table_name = (new ArticleCategoryModel)->getTable();
|
$table_name = (new ArticleCategoryModel)->getTable();
|
||||||
|
if (env('DB_VERSION', '5') == '8') {
|
||||||
$children = Db::query(
|
$children = Db::query(
|
||||||
preg_replace(
|
preg_replace(
|
||||||
'/\s+/u',
|
'/\s+/u',
|
||||||
@@ -77,6 +80,20 @@ class ArticleCategoryValidate extends Validate
|
|||||||
SELECT id FROM article_tree_by WHERE id <> {$data['id']};"
|
SELECT id FROM article_tree_by WHERE id <> {$data['id']};"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
$children = \think\facade\Db::query("
|
||||||
|
SELECT t2.id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM $table_name WHERE FIND_IN_SET(pid, _id)) AS parent_id
|
||||||
|
FROM
|
||||||
|
(SELECT @r := {$data['id']}) vars, $table_name h
|
||||||
|
WHERE @r <> 0) t1
|
||||||
|
JOIN $table_name t2
|
||||||
|
ON FIND_IN_SET(t2.pid, t1._id)
|
||||||
|
ORDER BY t2.id;
|
||||||
|
");
|
||||||
|
}
|
||||||
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ class AttachmentCategoryValidate extends Validate
|
|||||||
if ($value == 0) {
|
if ($value == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$children = [];
|
||||||
$table_name = (new AttachmentCategoryModel)->getTable();
|
$table_name = (new AttachmentCategoryModel)->getTable();
|
||||||
|
if (env('DB_VERSION', '5') == '8') {
|
||||||
$children = Db::query(
|
$children = Db::query(
|
||||||
preg_replace(
|
preg_replace(
|
||||||
'/\s+/u',
|
'/\s+/u',
|
||||||
@@ -62,6 +65,20 @@ class AttachmentCategoryValidate extends Validate
|
|||||||
SELECT id FROM attachment_tree_by WHERE id <> {$data['id']};"
|
SELECT id FROM attachment_tree_by WHERE id <> {$data['id']};"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
$children = \think\facade\Db::query("
|
||||||
|
SELECT t2.id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM $table_name WHERE FIND_IN_SET(pid, _id)) AS parent_id
|
||||||
|
FROM
|
||||||
|
(SELECT @r := {$data['id']}) vars, $table_name h
|
||||||
|
WHERE @r <> 0) t1
|
||||||
|
JOIN $table_name t2
|
||||||
|
ON FIND_IN_SET(t2.pid, t1._id)
|
||||||
|
ORDER BY t2.id;
|
||||||
|
");
|
||||||
|
}
|
||||||
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,10 @@ class NavigationItemValidate extends Validate
|
|||||||
if ($value == 0) {
|
if ($value == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$children = [];
|
||||||
$table_name = (new SysNavigationItemModel)->getTable();
|
$table_name = (new SysNavigationItemModel)->getTable();
|
||||||
|
if (env('DB_VERSION', '5') == '8') {
|
||||||
$children = Db::query(
|
$children = Db::query(
|
||||||
preg_replace(
|
preg_replace(
|
||||||
'/\s+/u',
|
'/\s+/u',
|
||||||
@@ -74,6 +77,20 @@ class NavigationItemValidate extends Validate
|
|||||||
SELECT id FROM tree_by WHERE id <> {$data['id']};"
|
SELECT id FROM tree_by WHERE id <> {$data['id']};"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
$children = \think\facade\Db::query("
|
||||||
|
SELECT t2.id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM $table_name WHERE FIND_IN_SET(pid, _id)) AS parent_id
|
||||||
|
FROM
|
||||||
|
(SELECT @r := {$data['id']}) vars, $table_name h
|
||||||
|
WHERE @r <> 0) t1
|
||||||
|
JOIN $table_name t2
|
||||||
|
ON FIND_IN_SET(t2.pid, t1._id)
|
||||||
|
ORDER BY t2.id;
|
||||||
|
");
|
||||||
|
}
|
||||||
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,10 @@ class SysMenuValidate extends Validate
|
|||||||
if ($value == 0) {
|
if ($value == 0) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$children = [];
|
||||||
$table_name = (new SysMenuModel)->getTable();
|
$table_name = (new SysMenuModel)->getTable();
|
||||||
|
if (env('DB_VERSION', '5') == '8') {
|
||||||
$children = Db::query(
|
$children = Db::query(
|
||||||
preg_replace(
|
preg_replace(
|
||||||
'/\s+/u',
|
'/\s+/u',
|
||||||
@@ -87,6 +90,20 @@ class SysMenuValidate extends Validate
|
|||||||
SELECT id FROM menu_tree_by WHERE id <> {$data['id']};"
|
SELECT id FROM menu_tree_by WHERE id <> {$data['id']};"
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
} else {
|
||||||
|
$children = \think\facade\Db::query("
|
||||||
|
SELECT t2.id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM $table_name WHERE FIND_IN_SET(pid, _id)) AS parent_id
|
||||||
|
FROM
|
||||||
|
(SELECT @r := {$data['id']}) vars, $table_name h
|
||||||
|
WHERE @r <> 0) t1
|
||||||
|
JOIN $table_name t2
|
||||||
|
ON FIND_IN_SET(t2.pid, t1._id)
|
||||||
|
ORDER BY t2.id;
|
||||||
|
");
|
||||||
|
}
|
||||||
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
if (!empty($children) && in_array($data['pid'], array_column($children, 'id'))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -274,7 +274,9 @@ class TopicNas extends Common
|
|||||||
->value('id');
|
->value('id');
|
||||||
|
|
||||||
// 获取帮且中心分类子分类
|
// 获取帮且中心分类子分类
|
||||||
|
$categorys = [];
|
||||||
$table_name = (new ArticleCategoryModel)->getTable();
|
$table_name = (new ArticleCategoryModel)->getTable();
|
||||||
|
if (env('DB_VERSION', '5') == '8') {
|
||||||
$categorys = \think\facade\Db::query(preg_replace(
|
$categorys = \think\facade\Db::query(preg_replace(
|
||||||
'/\s+/u',
|
'/\s+/u',
|
||||||
' ',
|
' ',
|
||||||
@@ -285,6 +287,20 @@ class TopicNas extends Common
|
|||||||
)
|
)
|
||||||
SELECT id FROM article_tree_by WHERE id <> {$parent}"
|
SELECT id FROM article_tree_by WHERE id <> {$parent}"
|
||||||
));
|
));
|
||||||
|
} else {
|
||||||
|
$categorys = \think\facade\Db::query("
|
||||||
|
SELECT t2.id
|
||||||
|
FROM (
|
||||||
|
SELECT
|
||||||
|
@r AS _id, (SELECT @r := GROUP_CONCAT(id) FROM $table_name WHERE FIND_IN_SET(pid, _id)) AS parent_id
|
||||||
|
FROM
|
||||||
|
(SELECT @r := $parent) vars, $table_name h
|
||||||
|
WHERE @r <> 0) t1
|
||||||
|
JOIN $table_name t2
|
||||||
|
ON FIND_IN_SET(t2.pid, t1._id)
|
||||||
|
ORDER BY t2.id;
|
||||||
|
");
|
||||||
|
}
|
||||||
if (empty($categorys)) return success('success', []);
|
if (empty($categorys)) return success('success', []);
|
||||||
|
|
||||||
// 获取文章数据
|
// 获取文章数据
|
||||||
|
|||||||
Reference in New Issue
Block a user