【问题标题】:MYSQL like + groupMYSQL 喜欢 + 组
【发布时间】:2013-03-20 11:55:18
【问题描述】:

嗯,我遇到的问题主要是由于数据库结构不良引起的。我正在为一家代码非常混乱且表格非常大的公司编写此代码,因此我认为这不是修复结构的选择。

无论如何,我的问题是我试图以某种方式对字符串中不会单独存在的值进行分组...... 他们正在存储用逗号分隔的值......所以它会像

field: "category" value: 'var1, var2, var3'

我将使用以下查询进行搜索:

SELECT name, category 
FROM companies 
WHERE (MATCH(name, category) AGAINST ('$search' IN BOOLEAN MODE) 
       OR category LIKE '$search%')

它将与例如 var2 匹配(虽然它不限于 3 个变量,可以是单独的或更多),我会在 PHP 中手动拆分它,没问题。虽然我不会得到足够的比赛,但我想要例如通过不同的搜索进行 10 次匹配。更具体地说,我正在制作一个自动建议功能,这意味着例如我想将“moto%”与摩托车、单独的电机或其他任何东西相匹配,但我一直得到相同的值,就像会有几个 100结果包含“摩托车”,我不知道如何过滤它们,因为由于数据库结构错误,我无法使用 GROUP BY...

我发现了这个:T-SQL - GROUP BY with LIKE - is this possible? 它似乎是一个解决方案,但据我尝试,我无法让它与我想要的一起工作。

所以我想知道有哪些解决方案......如果绝对没有办法解决这个问题,我可能不得不修复 db 结构(但这确实必须是最后一个选项)

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    开始采取措施使数据库结构正确。制作一个额外的表格并用拆分值填充它。

    然后您可以使用适当的查询来选择您需要的数据。您和下一个开发人员将来在这个项目上的麻烦都会减少,更不用说查询速度的提高了。

    【讨论】:

    • 好吧,我就这么做,而不是寻找其他选择。不过,您有什么建议吗,如何将这些值拆分到一个新的数据库中?使用纯 MYSQL 或 PHP
    • 进入一个新表我的意思是......如果我没有找到任何东西,我会搜索它或创建一个新问题。
    • 我会创建新表,运行类似SELECT name, 的查询(或您选择用于唯一标识符的任何内容)category FROM companies,然后使用 php 来爆炸()类别的内容.对由此生成的每个类别使用 foreach 循环,将 id 和类别插入新表中。
    • 是的,我就是这么想的,只是想在我这样做之前确保没有更好的选择!谢谢。
    【解决方案2】:

    我不知道为什么我不能写评论,但也许你可以试试这个:

    SELECT name, category FROM companies WHERE category LIKE '$search%' or LOCATE('search', category)>0;
    

    如果在类别中出现您的任何“搜索”值,则可以查看。

    【讨论】:

      【解决方案3】:

      我不得不同意你应该正确地建立数据库。它会为您节省很多麻烦和时间。但是,使用 SELECT DISTINCT 可能会解决您的直接问题。

      【讨论】:

      • 不,不会。没有任何区别,正如我所说,我需要将它们按最有可能不可分组的字段进行分组......那里的值永远不会相同。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2014-03-30
      • 2012-03-17
      • 2010-11-10
      • 2011-07-17
      • 2013-05-26
      相关资源
      最近更新 更多