搜索任何表字段中是否存在变量并获取表字段名称

wh6knrhe  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(397)

在网页上使用dom,我创建了如下变量:

$adres = "Bruinbergstraat 2,Bruinberg,8730 Oedelem";

在mysql表中,我有很多记录;每个记录至少有一个地址字段,其他记录有更多的地址字段(最多7个)。
当我使用此代码查找变量是否存在于任何地址字段中时:

$command = "Select * from alleclubs where (adres1 like '%" . $adres ."%' or adres2 LIKE '%" . $adres ."%' or adres3 LIKE '%" . $adres ."%' or adres4 LIKE '%" . $adres ."%' or adres5 LIKE '%" . $adres ."%' or adres6 LIKE '%" . $adres ."%' or adres7 LIKE '%" . $adres ."%')";

结果找到0条记录。
如何解决这个问题,以便获得变量所在列的表字段名?

jq6vz3qz

jq6vz3qz1#

要获取与变量匹配的列的表字段名,可以执行以下操作-

"select *
       from (select 
                concat_ws(',',
                    if( adres1 LIKE '%$adres%','adres1',NULL),
                    if( adres2 LIKE '%$adres%','adres2',NULL),
                    if( adres3 LIKE '%$adres%','adres3',NULL),
                    if( adres4 LIKE '%$adres%','adres4',NULL),
                    if( adres5 LIKE '%$adres%','adres5',NULL),
                    if( adres6 LIKE '%$adres%','adres6',NULL),
                    if( adres7 LIKE '%$adres%','adres7',NULL)
                ) as 'matched_column_names',stamnummer
            from alleclubs ) derived_table
where matched_column_names != '' "

然后,当通过php迭代每一行时,您只需使用 explode() 结束 , 获取每个列名。
注意:您也可以使用 CASE 在mysql中,但是 CASE 比赛时停止。上面的查询将为您提供与匹配的所有列名 $adres 为了 each single row .
更新:
你可以直接在你的phpmyadmin和你的样品中检查这个 Bruinbergstraat 2,Bruinberg,8730 Oedelem 如下所示-

select *
       from (select 
                concat_ws(',',
                    if( adres1 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres1',NULL),
                    if( adres2 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres2',NULL),
                    if( adres3 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres3',NULL),
                    if( adres4 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres4',NULL),
                    if( adres5 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres5',NULL),
                    if( adres6 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres6',NULL),
                    if( adres7 LIKE '%Bruinbergstraat 2,Bruinberg,8730 Oedelem%','adres7',NULL)
                ) as 'matched_column_names',stamnummer
            from alleclubs ) derived_table
where matched_column_names != '';

相关问题