比较两个选择查询结果的相同数据mysql

时间:2015-08-25 16:58:03

标签: php mysql

我正在制作测试应用程序,用户将在输入框中输入他们的选择查询,并且应用程序必须比较它们是否与"正确的答案相同"查询。

"正确答案"查询在数据库中,可比较的选择由用户输入。

我喜欢EXCEPT和INTERSECT,但它们并不存在于mysql中。

示例我有这个数据库结构:db pic

申请中提问:

  1. 列出所有名字为Yana但姓氏不是泰勒的女学生的名字,姓氏和出生日期。
  2. 正确答案 -

    SELECT FIRSTNAME, LASTNAME, DATEOFBIRTH 
    FROM PERSON 
    JOIN STUDENTS ON PERSONID=STUDENTID
    WHERE GENDER=’F’ AND FIRSTNAME=’YANA’ AND LASTNAME<>’TAYLOR’
    

    我想检查返回的结果是否相同。错误的答案将是mysql查询,例如使用别名列:

    SELECT FIRSTNAME as first_name, LASTNAME as last_name, DATEOFBIRTH as date_of_birth ....
    

    甚至喜欢声明(如果它返回更多结果):

    WHERE GENDER=’F’ AND FIRSTNAME LIKE '%YANA%' AND LASTNAME<>'TAYLOR'
    

    所以我的问题是如何比较两个查询之间的结果:

    • 他们返回的行数是相同的
    • 他们的列名相等
    • 来自同一张桌子
    • 并且可能会返回一些关于它们是相同的真或假的指示?

2 个答案:

答案 0 :(得分:0)

在我看来,最好的方法是运行两个查询(存储的查询和键入的查询),然后将两个结果读取到单独的数组,并分析结果:

  • 每个数组中的count()将判断行数是否相等。
  • 如果使用返回的字段名称将数组放在一起,则很容易看出它们是否相同。
  • 如果两个结果集都匹配,您甚至不必担心表格是否正确。
  • 您可以使用PHP数组操作函数以您可能需要的任何方式比较行。一个简单的if($array1 === $array2)将告诉您两个数组是否具有相同的键和值。

如果您不需要分析SQL语句格式,只需知道查询是否正常运行并带来正确的数据,那么这种方法就足够了。

答案 1 :(得分:0)

这可能有点贪心,但您可以为每条记录创建一个MD5,然后计算所有这些MD5的MD5。比较这两个值,如果它们是正确的,那么结果是相同的。

例如

SELECT md5(GROUP_CONCAT(a.md)) FROM (
    SELECT 
      first_name, LASTNAME,
      md5(concat(first_name, LASTNAME)) as md from PERSON
    ) as a;