首页 > 解决方案 > 从一个表中获取数据并与另一个基本的包含值进行比较

问题描述


我有 2 个不同的数据库和 2 个表

这是表.1

Table.1
username | date | phone number | rank                   |
user1    | 2021 | xxx xxx xxxx | ALL                    |
user2    | 2021 | xxx xxx xxxx | river, domain, CW, road|
user3    | 2021 | xxx xxx xxxx | river, CW              |
user4    | 2021 | xxx xxx xxxx | owl, gold, moon, DD    |

还有Table.2

Table 2
rank    | CODE | locations | contain | price  | exp |
river   | WT-2 | xxx xxx xx| JRCOW20 | 500.00 | --- |
road    | CC2W | xxx xxx xx| ------- | 200.00 | --- |
owl     | 568T | xxx xxx xx| JCCW120 | 300.00 | --- |
owl     | CCCD | xxx xxx xx| CWFGTFF | 100.00 | --- |
CW      | PTR1 | xxx xxx xx| 09WWKAL | 100.00 | --- |
CW      | 1RRW | xxx xxx xx| WFR4444 | 300.00 | --- |

但用户根据要求分别要求所有项目

搜索排名使用表 2 的值并与表 1 进行比较

在以下情况下如何使用具有结果的 Sql 命令:

登录,user2所以我会得到

rank    | CODE | locations | contain | price  | exp |
river   | WT-2 | xxx xxx xx| JRCOW20 | 500.00 | --- |
road    | CC2W | xxx xxx xx| ------- | 200.00 | --- |
CW      | PTR1 | xxx xxx xx| 09WWKAL | 100.00 | --- |
CW      | 1RRW | xxx xxx xx| WFR4444 | 300.00 | --- |

但是如果当用户登录时user4 比我会得到

rank    | CODE | locations | contain | price  | exp |
owl     | 568T | xxx xxx xx| JCCW120 | 300.00 | --- |
owl     | CCCD | xxx xxx xx| CWFGTFF | 100.00 | --- |

我试图找出 SQL 部分,并测试了以下作品;但没有运气:

SELECT
    *
FROM
    [DB-1].[Table.1]
JOIN 
    [DB-2].[Table.2]
WHERE
    [DB-2].[Table.2] 
IN
    (
    [DB-1].[Table.1].[Col-Rank]
    )

但到目前为止,其中一些结果要么是空的,要么只是输出单个结果:

login as *user2* result:
user2    | 2021 | xxx xxx xxxx | river, domain, CW, road|
river   | WT-2 | xxx xxx xx| JRCOW20 | 500.00 | --- |

或者

login as *user4* result:
user4    | 2021 | xxx xxx xxxx | owl, gold, moon, DD    |
owl     | 568T | xxx xxx xx| JCCW120 | 300.00 | --- |

我不明白我应该在哪里更改细节,老实说,这对我来说是一个非常新的问题

目前使用 MySQl 7.4,由 PhpMyAdmin 也使用 PHP 7.4

PhpMyAdmin 可能有很多非正式的声明;仍在努力使一切正常;任何帮助将不胜感激!


以下是我尝试过的问题:

sql-query-multiple-records-against-one-column-value-need-to-compare-another

mysql-check-if-a-column-has-values-based-on-another-column

mysql-how-to-check-for-a-value-in-all-columns

标签: phpmysql

解决方案


IMO rank(即“河流、域、CW、道路”)应该是一个额外的表。

或者您可以使用REGEXP. 但我认为这将花费大量资源。我不是专家。

示例(未测试):

SELECT
    `tbl2`.*
FROM `Table1` AS `tbl1`
JOIN `Table2` AS `tbl2` ON `tbl2`.`rank` REGEXP REPLACE(`tb1`.`rank`,', ','|')
WHERE `username` = :username
;

计划是按名称“找到”表 1 中的用户,

然后加入表2rank

用于REGEXP检查该行是否匹配 fe 'river|domain|CW|road'

(“河流”或“域”或“CW”或“道路”)。

REPLACE 是为了得到, 一个|.

但就像我说的 - 我不是专家 =)


推荐阅读