找出MySQL数据来自哪一列

时间:2012-03-06 05:08:28

标签: php mysql

我有一个遗留网站,我正在为我的大学保持运营,而且我遇到了一些障碍。

我正在建立一个Rec信函审查系统,院长可以进入并检查信件是否适合去或是否需要重新加工。我的问题如下:

数据库根本没有标准化,大约有120列。 我已经让所有需要回复他们信件的学生,但我无法分辨出来自哪一栏(例如Rec1,Rec2,Rec3 ...... Rec10)。在不知道哪一列引发警报的情况下,我无法有效地链接到它。

我尝试使用mysql_fetch_field,但是我无法弄清楚如何将它与SELECT相结合,SELECT将其限制在包含推荐者ID的字段(这将在正确的列中,因此获取信息我需要)。

非常感谢任何帮助。如果您需要更多详细信息,请在下面询问感谢。

-samuel

4 个答案:

答案 0 :(得分:0)

  

我尝试使用mysql_fetch_field,

尝试使用mysql_fetch_assoc()

答案 1 :(得分:0)

假设:

CREATE TABLE `test_flat` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `rec1` varchar(100) DEFAULT NULL,
  `rec2` varchar(100) DEFAULT NULL,
  `rec3` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

使用初始数据:

INSERT INTO test_flat VALUES (NULL, 'name 0', '1', '2', '3');
INSERT INTO test_flat VALUES (NULL, 'name 1', '11', '12', '13');

SELECT * FROM test_flat;
+----+--------+------+------+------+
| id | name   | rec1 | rec2 | rec3 |
+----+--------+------+------+------+
|  1 | name 0 | 1    | 2    | 3    |
|  2 | name 1 | 11   | 12   | 13   |
+----+--------+------+------+------+

你可以:

SELECT *, IF (rec1 = '2', 'rec1', IF (rec2 = '2', 'rec2', IF (rec3 = 'rec3', 'rec3', ''))) AS matched FROM test_flat WHERE rec1 = '2' or rec2 = '2' or rec3 = '2';
+----+------+------+------+------+---------+
| id | name | rec1 | rec2 | rec3 | matched |
+----+------+------+------+------+---------+
|  1 | name | 1    | 2    | 3    | rec2    |
+----+------+------+------+------+---------+

答案 2 :(得分:0)

基本上你按照常识建议:

$value = 'idnumber';

$query = query("SELECT Rec1, Rec2, Rec3 FROM table WHERE {$value} IN (Rec1, Rec2, Rec3)");
$row   = mysql_fetch_assoc($query);

foreach(array_keys($row) as $h)
    if ($row[$h] == $value) {
        $column = $h;
        break;
    }

现在你有了$column

如果您可以执行许多列:

$arr_cols = array();
foreach(range(1, 20) as $i)
   $arr_cols[] = "Rec{$i}";

$str_cols = implode(', ', $arr_cols);

$query = query("SELECT {$str_cols} FROM table WHERE {$value} IN ({$str_cols})");

答案 3 :(得分:0)

如果是我,我很想修复现有的混乱局面。作为临时措施:

CREATE VIEW norm_rec AS
SELECT t1.id,
       'rec1' AS src_col,
       t1.rec1 as rec
FROM yourtable t1
UNION
SELECT t2.id,
       'rec2' AS src_col,
       t2.rec2 as rec
FROM yourtable t2
UNION
SELECT t3.id,
       'rec3' AS src_col,
       t3.rec3 as rec
FROM yourtable t3
....

根据数据的更改方式,物化视图会很有意义。