【问题标题】:PHP to select records from one table based on match of value contained in string in second table in MySqlPHP根据MySql中第二个表中字符串中包含的值的匹配从一个表中选择记录
【发布时间】:2014-03-26 21:55:05
【问题描述】:

对于我网站上的用户(标识为 $fb_user_id),我正在尝试提取产品表 ($productstable) 中产品所有者 ID (prod_owner_fb_id) 与用户朋友列表 ( $usertable.fb_friends) 列,存储为逗号分隔字符串 (varchar)。

下面使用 IN 子句的查询结果只有在 fb_friends 列中有单个值时才能成功提取记录,而不是多个值。

我是业余爱好者,所以不确定我是否遇到了复杂的问题或只是语法/用户错误。感谢任何帮助。

我的查询:

$query = "SELECT * FROM $productstable, $usertable WHERE $usertable.fb_user_id = $fb_user_id AND $productstable.prod_owner_fb_id IN ($usertable.fb_friends)"; 

示例数据:

用户表 - 用户表(两个字段 varchar):

fb_user_id          fb_friends

111111111111111 21709455,222222222222222,82101450,503046016,507...
222222222222222 111111111111111, 697041857,333333333333333,1000006...
333333333333333 111111111111111,1205332730,222222222222222

产品表 - productstable(两个字段 varchar):

product_id     prod_owner_fb_id 

A            111111111111111
B            111111111111111
C            222222222222222

注意 - LIKE 子句也不成功 - 没有找到记录,没有错误:

$query = "SELECT * FROM $productstable, $usertable WHERE $usertable.fb_user_id = $fb_user_id AND $productstable.prod_owner_fb_id LIKE '%" . $usertable1.fb_friends . "%'";

【问题讨论】:

    标签: php mysql string-matching multiple-tables


    【解决方案1】:

    您的 fb_friends 列并不是在 WHERE 子句中存储可搜索数据的最有效方式,尤其是在您进行扩展时。这是解决此问题的一种方法:

    考虑使用 3 列(id(主、自动增量)、fb_user_id(索引)、fb_friend)创建一个新表(friendstable - 您的命名约定)。每次用户添加朋友时,您都会在此表中插入一行。

    然后您生成一个带有如下查询的报告:

    $query = "SELECT * from productstable WHERE product_owner_fb_id IN (SELECT fb_friend from friendstable WHERE fb_user_id = '".$fb_user_id."')";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-03
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 2020-03-12
      • 1970-01-01
      相关资源
      最近更新 更多