Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在MySQL中应用真实度?_Php_Mysql - Fatal编程技术网

Php 如何在MySQL中应用真实度?

Php 如何在MySQL中应用真实度?,php,mysql,Php,Mysql,它显示出几种疾病。我只希望根据我输入的内容在数据库中检索最近的疾病。然后,结果是狼疮和麻疹 <?php include('connect.php'); //Function to sanitize values received from the form. Prevents SQL injection //Sanitize the POST values $symptom1 = $_POST['symptom1']

它显示出几种疾病。我只希望根据我输入的内容在数据库中检索最近的疾病。然后,结果是狼疮和麻疹

<?php

    include('connect.php');

        //Function to sanitize values received from the form. Prevents SQL injection

        //Sanitize the POST values


            $symptom1 = $_POST['symptom1'];
            $symptom2 = $_POST['symptom2'];
            $symptom3 = $_POST['symptom3'];
            $symptom4 = $_POST['symptom4'];

            $sql = mysql_query("SELECT disease FROM diseases WHERE 
            symptom1 LIKE '%". $symptom1."%' OR symptom1 LIKE '%". $symptom2."%' OR symptom1 LIKE '%". $symptom3."%' OR symptom1 LIKE '%". $symptom4."%' AND
            symptom2 LIKE '%". $symptom1."%' OR symptom2 LIKE '%". $symptom2."%' OR symptom2 LIKE '%". $symptom3."%' OR symptom2 LIKE '%". $symptom4."%' AND
            symptom3 LIKE '%". $symptom1."%' OR symptom3 LIKE '%". $symptom2."%' OR symptom3 LIKE '%". $symptom3."%' OR symptom3 LIKE '%". $symptom4."%' AND
            symptom4 LIKE '%". $symptom1."%' OR symptom4 LIKE '%". $symptom2."%' OR symptom4 LIKE '%". $symptom3."%' OR symptom4 LIKE '%". $symptom4."%'");

            while($row = mysql_fetch_array($sql))
            {   
                    echo $row['disease'];
            }   
            //end of while loop

?>

编辑:似乎你真正想要的是全文索引:

CREATE FULLTEXT INDEX ix_disease_symptoms 
ON diseases(symptom1, symptom2, symptom3, symptom4);
然后使用MATCH查询:

$symptom1 = $_POST['symptom1'];
$symptom2 = $_POST['symptom2'];
$symptom3 = $_POST['symptom3'];
$symptom4 = $_POST['symptom4'];

$sql = "SELECT disease,
            MATCH(symptom1, symptom2, symptom3, symptom4) 
            AGAINST('{$symptom1} {$symptom2} {$symptom3} {$symptom4}') AS score
        FROM diseases 
        WHERE MATCH(symptom1, symptom2, symptom3, symptom4) 
            AGAINST('{$symptom1} {$symptom2} {$symptom3} {$symptom4}')
        ORDER BY score DESC";

$result = mysql_query($sql);
if ($result) {
    while($row = mysql_fetch_assoc($result)) {   
        echo $row['disease'];
    }
} else {
    die(mysql_error());
}

编辑:似乎您真正想要的是全文索引:

CREATE FULLTEXT INDEX ix_disease_symptoms 
ON diseases(symptom1, symptom2, symptom3, symptom4);
然后使用MATCH查询:

$symptom1 = $_POST['symptom1'];
$symptom2 = $_POST['symptom2'];
$symptom3 = $_POST['symptom3'];
$symptom4 = $_POST['symptom4'];

$sql = "SELECT disease,
            MATCH(symptom1, symptom2, symptom3, symptom4) 
            AGAINST('{$symptom1} {$symptom2} {$symptom3} {$symptom4}') AS score
        FROM diseases 
        WHERE MATCH(symptom1, symptom2, symptom3, symptom4) 
            AGAINST('{$symptom1} {$symptom2} {$symptom3} {$symptom4}')
        ORDER BY score DESC";

$result = mysql_query($sql);
if ($result) {
    while($row = mysql_fetch_assoc($result)) {   
        echo $row['disease'];
    }
} else {
    die(mysql_error());
}

这是一个经典的论点的重要性。考虑对关系表模式进行重新设计:

  • 独特的疾病表
  • 明显的症状
  • 疾病症状联接表是一个多对多的疾病和症状联接表,其中多个疾病可以维持彼此共享的多个症状 此外,不需要复杂、复合或全文键。此外,这种结构可以很好地扩展到无限多的疾病和症状,而不是限制在4个

    最重要的是,查询更易于阅读和维护,您不再需要根据用户的选择检查四个
    症状
    组合的所有顺序可能性,而是在或
    子句中检查一个简单、清晰的

    $sql = "SELECT d.Disease, 
                   ds.SymptomID, 
                   s.Symptom
            FROM Diseases d
            INNER JOIN DiseaseSymptomJoin ds
                    ON d.DiseaseID = ds.DiseaseID 
            INNER JOIN Symptoms s
                    ON ds.SymptomID = s.SymptomID
            WHERE s.Symptom 
                    IN (".$symptom1.", ".$symptom2.", ".$symptom3.", ".$symptom4.")";
    
    或者,使用分数聚合:

     $sql = "SELECT Disease, 
                    Score
             FROM
                   (SELECT d.DiseaseID, 
                           d.Disease,
                           Count(*) As score
                    FROM Diseases d
                    INNER JOIN DiseaseSymptomJoin ds
                            ON d.DiseaseID = ds.DiseaseID 
                    INNER JOIN Symptoms s
                            ON ds.SymptomID = s.SymptomID
                    WHERE s.Symptom 
                        IN (".$symptom1.", ".$symptom2.", ".$symptom3.", ".$symptom4.")
                    GROUP BY d.DiseaseID,
                             d.Disease
             ) As dT
             ORDER BY score DESC";
    

    这是一个经典的论点的重要性。考虑对关系表模式进行重新设计:

  • 独特的疾病表
  • 明显的症状
  • 疾病症状联接表是一个多对多的疾病和症状联接表,其中多个疾病可以维持彼此共享的多个症状 此外,不需要复杂、复合或全文键。此外,这种结构可以很好地扩展到无限多的疾病和症状,而不是限制在4个

    最重要的是,查询更易于阅读和维护,您不再需要根据用户的选择检查四个
    症状
    组合的所有顺序可能性,而是在
  • 子句中检查一个简单、清晰的

    $sql = "SELECT d.Disease, 
                   ds.SymptomID, 
                   s.Symptom
            FROM Diseases d
            INNER JOIN DiseaseSymptomJoin ds
                    ON d.DiseaseID = ds.DiseaseID 
            INNER JOIN Symptoms s
                    ON ds.SymptomID = s.SymptomID
            WHERE s.Symptom 
                    IN (".$symptom1.", ".$symptom2.", ".$symptom3.", ".$symptom4.")";
    
    或者,使用分数聚合:

     $sql = "SELECT Disease, 
                    Score
             FROM
                   (SELECT d.DiseaseID, 
                           d.Disease,
                           Count(*) As score
                    FROM Diseases d
                    INNER JOIN DiseaseSymptomJoin ds
                            ON d.DiseaseID = ds.DiseaseID 
                    INNER JOIN Symptoms s
                            ON ds.SymptomID = s.SymptomID
                    WHERE s.Symptom 
                        IN (".$symptom1.", ".$symptom2.", ".$symptom3.", ".$symptom4.")
                    GROUP BY d.DiseaseID,
                             d.Disease
             ) As dT
             ORDER BY score DESC";
    


    “最近的”是什么意思?症状匹配的数量或其他情况?@mseifert这是一个场景,我输入了4个症状:1=发烧,2=头痛,3=疲劳,4=关节肿胀。结果是狼疮和麻疹。我只想要狼疮,因为它有4种输入症状,而麻疹只有1种,这就是发烧症状。@jankryss-你为什么要用
    这样的
    ?输入症状与数据库症状不完全匹配吗?它们确实匹配,我只是对数据进行了多维读取@StevenMoseley@jankryss-更多关注上述问题。您想要的是mysql\u fetch\u assoc
    (不是数组)
    mysql\u查询
    已被弃用(请改用
    mysqli\u查询
    )。您没有查询错误的
    die()
    子句。您的$u POST参数没有sql注入保护。“最近”是什么意思?症状匹配的数量或其他情况?@mseifert这是一个场景,我输入了4个症状:1=发烧,2=头痛,3=疲劳,4=关节肿胀。结果是狼疮和麻疹。我只想要狼疮,因为它有4种输入症状,而麻疹只有1种,这就是发烧症状。@jankryss-你为什么要用
    这样的
    ?输入症状与数据库症状不完全匹配吗?它们确实匹配,我只是对数据进行了多维读取@StevenMoseley@jankryss-更多关注上述问题。您想要的是mysql\u fetch\u assoc
    (不是数组)
    mysql\u查询
    已被弃用(请改用
    mysqli\u查询
    )。您没有查询错误的
    die()
    子句。您的$u POST参数上没有sql注入保护。如果我加上括号,那么我无法获得其他疾病,它将只检索具有4种症状的疾病,并将其匹配到我看到的数据库中。。。您似乎需要全文索引创建全文索引ix_疾病症状(症状1、症状2、症状3、症状4);先生,我会为这个创建另一个表吗?然后插入我的症状数据?不,您将在现有表上创建一个索引,这将使列可以使用全文查询进行搜索。好的,我已经这样做了,但是。先生,您的查询有一个错误。如果我加上括号,那么我就无法获得其他疾病,它将只检索到有4个症状匹配到数据库中的疾病我看到。。。您似乎需要全文索引创建全文索引ix_疾病症状(症状1、症状2、症状3、症状4);先生,我会为这个创建另一个表吗?然后插入我的症状数据?不,您将在现有表上创建一个索引,这将使列可以使用全文查询进行搜索。好的,我已经这样做了,但是。您提供的查询有一个错误,先生。我尝试过,但没有检索到疾病,即使我在数据库中输入了3个匹配的症状。我尝试过,但没有检索到疾病,即使我在数据库中输入了3个匹配的症状