我有一个遗留网站,我正在为我的大学保持运营,而且我遇到了一些障碍。
我正在建立一个Rec信函审查系统,院长可以进入并检查信件是否适合去或是否需要重新加工。我的问题如下:
数据库根本没有标准化,大约有120列。 我已经让所有需要回复他们信件的学生,但我无法分辨出来自哪一栏(例如Rec1,Rec2,Rec3 ...... Rec10)。在不知道哪一列引发警报的情况下,我无法有效地链接到它。
我尝试使用mysql_fetch_field,但是我无法弄清楚如何将它与SELECT相结合,SELECT将其限制在包含推荐者ID的字段(这将在正确的列中,因此获取信息我需要)。
非常感谢任何帮助。如果您需要更多详细信息,请在下面询问感谢。
-samuel
答案 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
....
根据数据的更改方式,物化视图会很有意义。