我有一个矩阵表。 6列宽6行深。第一列按顺序编号为0,5,4,3,2,1。表中的第一行是0,1,2,3,4,5 像这样:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
每一行都有单词,即MEDIUM
,HIGH
,CRITICAL
等。
我有一个用户填写的表单,要求他们在两个类别中给出1-5的评分。它们的选择对应于矩阵中的一个单词。那......所有......我需要能够从表中选择这样的东西:
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
我看过IN,但到目前为止我看到的一切仍然要求你有另一个WHERE x = y部分。我可以将整个表转储到一个数组中以某种方式得到我之后的东西吗?如你所见,我在这方面毫无头绪。
答案 0 :(得分:0)
您可以这样做:
SELECT CASE :b2
WHEN 1 THEN t.rm1
WHEN 2 THEN t.rm2
WHEN 3 THEN t.rm3
WHEN 4 THEN t.rm4
WHEN 5 THEN t.rm5
ELSE ''
END AS `the_word`
FROM TBLX t
WHERE t.rm0 = :b1
我对桌面设计感到困惑。而且第一行更加困惑......如果你想把它纳入查询中,那将非常复杂。
就普通的关系设计而言,我们将其表示为每对值的行,每行都有一个单词。
mymatrix
x_rating y_rating the_word
-------- -------- --------
1 1 LOW
1 2 LOW
1 3 MEDIUM
1 4 MEDIUM
1 5 MEDIUM
2 1 LOW
2 2 MEDIUM
2 3 MEDIUM
...
5 5 HIGH
获取“单词”的查询示例如下:
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
要将相同的查询模式与原始表一起使用,我们可以将原始表转换为mymatrix表,使用RM0 = 0行中RM1到RM5列的值作为y_rating值。执行此操作的SQL相当麻烦:
SELECT mx.the_word
FROM (
SELECT t1.rm0 AS x_rating
, s1.rm1 AS y_rating
, t1.rm1 AS the_word
FROM mytable t1
JOIN mytable s1
ON s1.rm0 = 0
AND t1.rm0 > 0
UNION ALL
SELECT t2.rm0 AS x_rating
, s2.rm1 AS y_rating
, t2.rm1 AS the_word
FROM mytable t2
JOIN mytable s2
ON s2.rm0 = 0
AND t2.rm0 > 0
UNION ALL
SELECT t3.rm0 AS x_rating
, s3.rm1 AS y_rating
, t3.rm1 AS the_word
FROM mytable t3
JOIN mytable s3
ON s3.rm0 = 0
AND t3.rm0 > 0
UNION ALL
SELECT t4.rm0 AS x_rating
, s4.rm1 AS y_rating
, t4.rm1 AS the_word
FROM mytable t4
JOIN mytable s4
ON s4.rm0 = 0
AND t4.rm0 > 0
UNION ALL
SELECT t5.rm0 AS x_rating
, s5.rm1 AS y_rating
, t5.rm1 AS the_word
FROM mytable t5
JOIN mytable s5
ON s5.rm0 = 0
AND t5.rm0 > 0
) mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
答案 1 :(得分:0)
我最终采取了不同的路线。我仍然使用矩阵表,但是当我需要检索信息时,我没有尝试访问,而是查询了一次表,获取了所有信息并将其放入如下数组中:
sql = "SELECT * FROM `tblriskmatrix`";
if (!$conn->query($sql)) {
echo "query failed: (" . $conn->errno . ") " . $conn->error;
}
$result = $conn->query($sql);
$arrayOfMatrix = array();
while ($row = $result->fetch_assoc()) {
$arrayOfMatrix[] = $row;
}
然后我将数组放入一个像这样的会话变量中:
$_SESSION['arrayOfMatrix'] = $arrayOfMatrix;
然后我创建了一些函数来获取按键并将它们传递给另一个执行ajax调用的函数,传递按下这些变量的按键脚本的变量并将它们传递给我的会话变量并返回所需的结果。像这样:
session_start();
$a = $_GET['var_a'];
$b = $_GET['var_b'];
$response = array('response' => $_SESSION['arrayOfMatrix'][$a]["RM$b"]);
echo json_encode($response);
然后将响应传递给表单元素并显示。因此,将会话变量中的矩阵表作为数组,我可以轻松地提取列y中第x行单元格内容。不确定它是否是技术上最正确的路线,但它有效。