【问题标题】:Writing sql query for getting search result编写sql查询以获取搜索结果
【发布时间】:2013-12-28 02:46:21
【问题描述】:

当我编写 sql 查询以通过文本框获取搜索结果时,它会多次重复相同的结果。我只需要一次结果。请帮我解决这个问题 这是我的查询

SELECT *
FROM pm_record, dead_body
WHERE pm_record.sr_no = dead_body.sr_no
AND dead_body.sr_no = '$input_search'
OR pm_record.date_of_autopsy = '$input_search'
OR pm_record.status = '$input_search'
OR dead_body.sex = '$input_search'
OR dead_body.f_name = '$input_search'
OR dead_body.date_of_death = '$input_search'
OR pm_record.staff_id = '$input_search'
OR pm_record.assiated = '$input_search'
OR pm_record.inq_no_ISD = '$input_search'
OR pm_record.circumstances = '$input_search'

【问题讨论】:

  • 这个查询可能没有像你想象的那样做。检查是否需要 AND 或 OR 周围的括号
  • 不,即使我加上括号,它也会给我相同的重复结果
  • 显示表结构和记录
  • 如果可以的话,请使用您的数据库表结构和一些示例数据创建一个 sqlfiddle,这对大家帮助您解决问题最有帮助。

标签: mysql sql select distinct


【解决方案1】:

使用SELECT DISTINCT * 代替SELECT *

【讨论】:

  • 它不工作。它给了我同样的重复结果
【解决方案2】:

您可以为此使用DISTINCT。仅指定您需要的列而不是 *。

SELECT DISTINCT *
FROM pm_record, dead_body
WHERE pm_record.sr_no = dead_body.sr_no
    AND dead_body.sr_no = '$input_search'
    OR pm_record.date_of_autopsy = '$input_search'
    OR pm_record.status = '$input_search'
    OR dead_body.sex = '$input_search'
    OR dead_body.f_name = '$input_search'
    OR dead_body.date_of_death = '$input_search'
    OR pm_record.staff_id = '$input_search'
    OR pm_record.assiated = '$input_search'
    OR pm_record.inq_no_ISD = '$input_search'
    OR pm_record.circumstances = '$input_search'

【讨论】:

  • 正如我所提到的,仅在 SELECT 中指定您需要的列而不是 *。例如选择不同的 Col1,Col2 ......
  • 我需要表格中的所有字段。现在我改变了我的编码,正如你所说的那样,它正在重复。例如,我只有 2 条女性记录。但是这两个结果重复了我 9 次。所以我得到 18 个结果
  • 表格中的行真的不同吗?给我例子。
  • 是的,行是不同的。但只有结果是重复的。
  • 例如,我只有 2 条女性记录。如果我在表中搜索女性记录,它应该显示 2 条记录。但是这两个结果重复了我 9 次。所以我得到 18 个结果。结果在重复。
【解决方案3】:

试试这个

SELECT DISTINCT *
    FROM pm_record, dead_body
    WHERE pm_record.sr_no = dead_body.sr_no
    AND 
    (dead_body.sr_no = '$input_search'
    OR pm_record.date_of_autopsy = '$input_search'
    OR pm_record.status = '$input_search'
    OR dead_body.sex = '$input_search'
    OR dead_body.f_name = '$input_search'
    OR dead_body.date_of_death = '$input_search'
    OR pm_record.staff_id = '$input_search'
    OR pm_record.assiated = '$input_search'
    OR pm_record.inq_no_ISD = '$input_search'
    OR pm_record.circumstances = '$input_search' )

【讨论】:

    【解决方案4】:

    使用DISTINCT关键字删除重复记录,也使用IN子句删除多个OR运算符以提高查询性能。

    试试这个:

    SELECT DISTINCT *
    FROM pm_record p INNER JOIN dead_body d ON p.sr_no = d.sr_no
    WHERE '$input_search' IN (d.sr_no, p.date_of_autopsy, p.status, d.sex, d.f_name, 
                              d.date_of_death, p.staff_id, p.assiated, p.inq_no_ISD, 
                              p.circumstances);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 2018-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 2010-11-26
      相关资源
      最近更新 更多