我正在尝试选择文本输入值等于的列,我从输入中返回一个值并且可以回显它。但是我不能进行搜索并回显该值所在的列。我需要能够回显值所在的列名,如果它在多个列中,则需要多次。 任何帮助表示赞赏。
$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>");
}}
答案 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%'
...
如果一行在多列中匹配,则在此结果中将变为多行。