Mysql 不是交叉点,而是某种程度上的交叉点。其中a列x与b列相交

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

我有一张矩阵表。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 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行单元格中的内容。不确定这是否是技术上最正确的路线,但它确实有效

我不知道你想干什么。表中的
+
是什么意思?+只是间隔符为什么不使用空格?要发布这样的格式化表,请粘贴纯文本,标记它,然后使用
{}
工具将其缩进为代码。我下次会这样做