如何选择值等于的列?

时间:2013-09-02 06:51:49

标签: php mysql

我正在尝试选择文本输入值等于的列,我从输入中返回一个值并且可以回显它。但是我不能进行搜索并回显该值所在的列。我需要能够回显值所在的列名,如果它在多个列中,则需要多次。 任何帮助表示赞赏。

 $skw = $_POST['k'];
    if(isset($_POST['k'])){
    $connect = mysql_connect('*', '*', '*')or die('Could not execute command. Please contact a administrator.');
    mysql_select_db('*')or die('No database');
    $query = "SELECT * FROM *TABLE*
    WHERE A1 LIKE '%$skw%' 
    OR B1 LIKE '%$skw%' 
    OR C1 LIKE '%$skw%' 
    OR D1 LIKE '%$skw%' 
    OR E1 LIKE '%$skw%' 
    OR F1 LIKE '%$skw%' 
    OR G1 LIKE '%$skw%' 
    OR H1 LIKE '%$skw%' 
    OR I1 LIKE '%$skw%' 
    OR J1 LIKE '%$skw%'
    OR A2 LIKE '%$skw%' 
    OR B2 LIKE '%$skw%' 
    OR C2 LIKE '%$skw%' 
    OR D2 LIKE '%$skw%' 
    OR E2 LIKE '%$skw%' 
    OR F2 LIKE '%$skw%' 
    OR G2 LIKE '%$skw%' 
    OR H2 LIKE '%$skw%' 
    OR I2 LIKE '%$skw%' 
    OR J2 LIKE '%$skw%'
    OR A3 LIKE '%$skw%' 
    OR B3 LIKE '%$skw%' 
    OR C3 LIKE '%$skw%' 
    OR D3 LIKE '%$skw%' 
    OR E3 LIKE '%$skw%' 
    OR F3 LIKE '%$skw%' 
    OR G3 LIKE '%$skw%' 
    OR H3 LIKE '%$skw%' 
    OR I3 LIKE '%$skw%' 
    OR J3 LIKE '%$skw%'
    OR A4 LIKE '%$skw%' 
    OR B4 LIKE '%$skw%' 
    OR C4 LIKE '%$skw%' 
    OR D4 LIKE '%$skw%' 
    OR E4 LIKE '%$skw%' 
    OR F4 LIKE '%$skw%' 
    OR G4 LIKE '%$skw%' 
    OR H4 LIKE '%$skw%' 
    OR I4 LIKE '%$skw%' 
    OR J4 LIKE '%$skw%'
    OR A5 LIKE '%$skw%' 
    OR B5 LIKE '%$skw%' 
    OR C5 LIKE '%$skw%' 
    OR D5 LIKE '%$skw%' 
    OR E5 LIKE '%$skw%' 
    OR F5 LIKE '%$skw%' 
    OR G5 LIKE '%$skw%' 
    OR H5 LIKE '%$skw%' 
    OR I5 LIKE '%$skw%' 
    OR J5 LIKE '%$skw%'
    OR A6 LIKE '%$skw%' 
    OR B6 LIKE '%$skw%' 
    OR C6 LIKE '%$skw%' 
    OR D6 LIKE '%$skw%' 
    OR E6 LIKE '%$skw%' 
    OR F6 LIKE '%$skw%' 
    OR G6 LIKE '%$skw%' 
    OR H6 LIKE '%$skw%' 
    OR I6 LIKE '%$skw%' 
    OR J6 LIKE '%$skw%'";
    $result = mysql_query($query)or die(mysql_error());
        while($data = mysql_fetch_row($result)){
     echo("<tr><td>$data[0]</td><td>$data[1]</td></tr>");
    }}

3 个答案:

答案 0 :(得分:0)

考虑规范化您的数据库,以便所有这些字段A1 ... J6都是单独的行:

mytable_fields:
* field_ref (foreign key to mytable)
* field_nr
* field_value

您的查询将成为:

SELECT field_nr, mytable.*
FROM mytable
INNER JOIN mytable_fields ON mytable.field_ref = mytable.id
WHERE field_value LIKE '%$skw%';

这是唯一可以判断哪个字段包含您要搜索的值的实用方法。

答案 1 :(得分:0)

您应该使用show columns来获取列名,请检查以下语法。

显示[FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name] [喜欢'模式'| WHERE expr]

答案 2 :(得分:0)

使用UNION,其中每个子查询与单个列匹配,并输出一个附加列,说明它匹配哪个列。

SELECT 'A1' AS Col, *
FROM Table
WHERE A1 LIKE '%$skw%'
UNION
SELECT 'B1' AS Col, *
FROM Table
WHERE B1 LIKE '%$skw%'
UNION
SELECT 'C1' AS Col, *
FROM Table
WHERE C1 LIKE '%$skw%'
...

如果一行在多列中匹配,则在此结果中将变为多行。