Mysql 不是交叉点,而是某种程度上的交叉点。其中a列x与b列相交
我有一张矩阵表。6列宽6行深。第一列的数字顺序为0、5、4、3、2、1。表中的第一行是0,1,2,3,4,5 所以像这样:Mysql 不是交叉点,而是某种程度上的交叉点。其中a列x与b列相交,mysql,Mysql,我有一张矩阵表。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 SELECT FROM T
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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;
每行中都有单词,即,中等
,高
,关键
等。
我有一张用户填写的表格,要求他们在两个类别中给出1-5的评级。他们的选择对应于矩阵中的一个单词。所以..在所有这些之后..我需要能够从表中选择如下内容:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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;
我已经看过了,但到目前为止,我看到的所有东西都要求你们有另一个x=y部分。我可以把整个表转储到一个数组中吗?如你所见,我在这方面一无所知。你可以这样做:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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;
我被桌子的设计搞糊涂了。更让人困惑的是第一排。。。如果您想将其合并到查询中,这将是非常复杂的 在普通的关系设计中,我们将它表示为每对值的行,每行上有一个单词
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
获取“单词”的查询示例如下:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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;
为了在原始表中使用相同的查询模式,我们可以使用RM0=0行中RM1到RM5列的值作为y_评级值,将原始表转换为类似于mymatrix表。要做到这一点,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
我最终选择了另一条路线。我仍然使用矩阵表,但在需要检索信息时,我没有尝试访问该表,而是查询了该表一次,将所有信息放入如下数组:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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;
然后我将数组放入会话变量中,如下所示:
Column names RM0 RM1 RM2 RM3 RM4 RM5
0 1 2 3 4 5
5
4
3
2
1
SELECT FROM TBLX WHERE RM0=4 INTERSECTS WITH RM4
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
SELECT mx.the_word
FROM mymatrix mx
WHERE mx.x_rating = :b1
AND mx.y_rating = :b2
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行单元格中的内容。不确定这是否是技术上最正确的路线,但它确实有效 我不知道你想干什么。表中的
+
是什么意思?+只是间隔符为什么不使用空格?要发布这样的格式化表,请粘贴纯文本,标记它,然后使用{}
工具将其缩进为代码。我下次会这样做