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

时间:2018-08-17 13:40:38

标签: php mysql

使用网页上的DOM,我创建一个像这样的变量:

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

在MySql表中,我有很多记录;每条记录至少具有1个地址字段,其他记录具有更多地址字段(最多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条记录。

如何解决此问题,以便获取变量所在列的表字段名称?

1 个答案:

答案 0 :(得分:0)

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

"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()上使用,即可获取每个列名。

注意:您还可以在MySQL中使用CASE,但是如果有匹配项,CASE就会停止。上面的查询将为您提供与$adres的{​​{1}}匹配的所有列名称。

更新

您可以使用示例each single row如下所示直接在phpMyAdmin中进行检查-

Bruinbergstraat 2,Bruinberg,8730 Oedelem