代码之家  ›  专栏  ›  技术社区  ›  Devner

php,mysql:mysql在数组函数中代替php

  •  3
  • Devner  · 技术社区  · 15 年前

    假设我有一个数组,我想检查一个元素是否是该数组的一部分,我可以继续使用数组(针,草堆)来确定结果。为了我的目的,我正试图看到这个PHP等价物。现在你可能有一个即时的答案给我,你可能会想说“用在”。是的,我可以在中使用,但这并不能获得所需的结果。让我举例说明一下:

    我在数据库表中有一个叫做“宠物”的列。对于记录,它有一个值: 猫,狗,Camel (是的,列数据是逗号分隔的值)。假设此行的ID为1。

    现在我有了一个表单,我可以在表单输入中输入值,并使用该值检查DB中的值。所以假设我在表单输入中输入以下逗号分隔的值: 骆驼猫 (是的,cat是大写的&有意的,因为有些用户倾向于这样输入它)。

    现在,当我在表单输入和提交中输入上述信息时,我可以收集发布的信息并使用以下查询:

    $search = $_POST['pets'];
    $sql = "SELECT id FROM table WHERE pets IN ('$search') "; 
    
    1. 上面的查询没有获取数据库中已经存在的行(请记住 猫,狗,Camel 作为宠物栏的值?).I正在尝试将记录作为超集,并将表单输入中的值作为子集。因此,在本例中,我希望ID值显示为列中存在的值,但这不是偶然的。

    2. 如果我进去就说 作为表单输入并执行搜索,它应该显示ID 1行。

    3. 如果我进去就说 骆驼,猫 作为表单输入并执行搜索,它应该显示ID 1行。

    我如何才能实现上述目标?

    谢谢您。

    5 回复  |  直到 7 年前
        1
  •  5
  •   user187291    15 年前

    你要找的功能是 find_in_set :

     select * from ... where find_in_set($word, pets)
    

    对于多单词查询,您需要测试每个单词和(或)测试:

      where find_in_set($word1, pets) AND find_in_set($word2, pets) etc 
    
        2
  •  4
  •   iSavaDev    12 年前

    () 检查值是否在一组值内

    mysql> SELECT 2 IN (0,3,5,7);
            -> 0
    mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
            -> 1
    
    SELECT val1 FROM tbl1 WHERE val1 IN (1,2,'a');
    

    View: IN MySql

        3
  •  2
  •   Community CDub    8 年前

    在反馈和直接回答您的问题方面,我为您准备了一些东西:

    首先,我建议您清理输入。每个人都会告诉你的。为此,请参阅 What’s the best method for sanitizing user input with PHP? .

    其次,如果要使用MySQL并且需要存储用户格式的输入,请使用upper()或lower()规范化输入;如果要在存储输入之前处理输入,请使用strToUpper()和strToLower()。

    您仍然可以在用户查询中查看订单。例如“猫,狗” 应该 产生与“狗,猫”相同的结果。如果你用一个类似的语句来编写代码,那么性能问题会把你活活吞噬掉。不仅需要动态地创建查询,还需要进行大量不必要的复杂查询。总之,算了吧。你 更改存储数据的方式。

    实现这一点的一种方法是创建一个关系表,该关系表引用一个唯一用户输入表和您的记录。这张桌子看起来像

    user_id | pet_id
    

    每个用户都可以有多个宠物ID与其关联。我很久以前就建立了一个数据库,就像你一样,遇到了同样的问题。从性能上讲,它从来没有得到回报,它的任何东西,但良好的风格。我最终改变了我的结构,因为这就是上面提到的方法。

        4
  •  0
  •   Pietro La Grotta    7 年前

    此mysql函数将int值搜索到int的json数组中:

    ——实例:

    --select is_into_json_array(18,'[25,10,15]');->-100
    --select is_into_json_array(25,'[25,10,15]');->0
    --select is_into_json_array(15,'[25,10,15]');->2

    https://github.com/PietroLaGrotta/Json-in-mysql-text-type/blob/master/is_into_json_in_array.sql

        5
  •  -2
  •   Your Common Sense    15 年前

    是的,列数据是逗号 分离值

    这是你的错。
    不,不应该是逗号分隔的值
    您的数据库结构应该规范化。