首页 > 解决方案 > 无法从 DB 获取信息,在使用 LIKE 函数 SQL 时丢失信息

问题描述

我是编码新手,如果你能从你们那里得到一个想法,我真的需要一些帮助。我正在开发一个基本上是管理界面的 WP 插件。我根据我的 BD 创建了一个表,其中包含不同的信息,但是我在处理一些 sql 请求时遇到了一些问题。我有很多表,我需要将它们组合起来以获得我想要的东西:

注册码 许可证编号 元值
def5002313131 1 一些文字
def5056462131 1 一些文字
def5064654631 1 一些文字
def5646162131 2 一些文字
def5541541531 3 一些文字

使用以下代码:

SELECT SUBSTRING(W551je5v_lmfwc_licenses.license_key,1,15), W551je5v_lmfwc_licenses.user_id, W551je5v_posts.post_author, W551je5v_postmeta.meta_value FROM W551je5v_lmfwc_licenses 
LEFT JOIN W551je5v_users ON W551je5v_lmfwc_licenses.user_id = W551je5v_users.ID 
LEFT JOIN W551je5v_posts ON W551je5v_lmfwc_licenses.user_id = W551je5v_posts.post_author
LEFT JOIN W551je5v_postmeta ON W551je5v_postmeta.post_id = W551je5v_posts.ID
WHERE W551je5v_lmfwc_licenses.user_id IS NOT NULL AND W551je5v_users.ID IS NOT NULL 
GROUP BY W551je5v_lmfwc_licenses.license_key
ORDER BY user_id;

从 postmeta 获取 meta_value,从 license 中获取每个许可证信息,但我必须通过另外 2 个表才能到达 postmeta。通过按 license_key 分组,我只得到与 license_id 对应的 meta_value 的第一行。在那些 meta_value 中,有一个我必须得到的 mac 地址(这是最后一点)。所以我使用 LIKE 函数来获取 meta_value,它的 meta_key 等于'mac'(meta_key 是 postmeta 表中的另一个 col)W551je5v_postmeta.meta_key LIKE 'mac'。但是当我这样做时,我丢失了一些 ID,因为他们没有 mac 地址,我仍然想让他们创建这样的表

注册码 许可证编号 元值
def5002313131 1 mac地址
def5056462131 1 mac地址
def5064654631 1 mac地址
def5646162131 2 无效的
def5541541531 3 mac地址

我找不到任何解决方案,因为 LIKE 只保留带有 mac 地址的线路。

我还尝试对每个 meta_value 信息进行 GROUP_CONCAT 并使用 REGEX 来获取 mac 地址,但是 GROUP_CONCAT 的字符数有限,我超出了限制。我无法在我的网站上找到如何使用 SET @@global.group_concat_max_len = 1000000,如果您对不使用 GROUP CONCAT 或 LIKE 的情况下如何做到这一点有任何想法,但在保留每一行时做同样的事情,我会很感激。抱歉我的英语不好,如果我不是很清楚,但我试图尽可能多地解释它,请问你是否需要更多信息。

标签: sql

解决方案


推荐阅读