【问题标题】:Group_CONCAT search [duplicate]Group_CONCAT 搜索 [重复]
【发布时间】:2011-12-11 13:25:49
【问题描述】:

可能重复:
Combining several database table together?

我有以下查询,想在$find 中的每个值对name_re_all 进行处理,我的查询中的情况如何?

例如: name_re_all 为:

ROW 3: 11111 22222 33333 44444
ROW 2: 55555 66666 77777
ROW 1: 88888 99999 112233 445566

如果值 $find11111,则显示第 3 行的所有值:11111 22222 33333 44444
或者
如果值 $find66666 显示所有值第 2 行:55555 66666 77777
或者
如果值 $find33333 显示所有值第 3 行:11111 22222 33333 44444
或者
如果值 $find778899 显示所有值第 1 行:88888 99999 112233 445566
或者
...

$query = $this -> db -> query('
            SELECT
               @rownum := @rownum + 1 rownum,
               tour_foreign.id, 
               tour_foreign.name,
               tour_foreign.airline,
               MIN(tour_foreign_residence.name_re) AS name_re, 
               tour_foreign.service, 
               tour_foreign.date_go, 
               tour_foreign.date_back, 
               tour_foreign.term,
               tour_foreign.useradmin_submit,
               tour_foreign.date_submit,
               GROUP_CONCAT( tour_foreign_residence.name_re 
                     ORDER BY tour_foreign_residence.name_re 
                     SEPARATOR "، "
                   ) AS name_re_all
            FROM   tour_foreign 
              INNER JOIN tour_foreign_residence 
            ON ( tour_foreign.id = tour_foreign_residence.relation )
              JOIN (SELECT @rownum := 0) r
            WHERE  tour_foreign.name LIKE "%' . $find . '%" 
            GROUP BY  tour_foreign.id 
            HAVING name_re_all LIKE "%' . $find . '%"'
            );

我在数据库中的表:

【问题讨论】:

  • 请张贴表结构和一些(代表性)示例数据。
  • 我把表格放在帖子里,请看。
  • 呸,又是这个mysterious query!同一个查询后,这些人都是谁?!
  • @Col。弹片——这只是一个例子
  • @Wall Street 至少有 3 个不同的帐户(Alicia Cibrian、Nicole Spears、Jennifer Anthony 和这个)发布了同样的查询,并且英语水平相同。请尝试您给出的所有答案,我不敢相信没有人工作;在这种情况下,那么问题就有问题了,并且在没有重大变化的情况下重新发布它对您没有帮助。

标签: php mysql join group-concat


【解决方案1】:

作为变体:将此查询包装到子查询中 -

SELECT * FROM (
  your query...
) t
WHERE FIND_IN_SET('11111', name_re_all);

编辑: 你应该使用子查询!

SELECT * FROM (
  SELECT
     @rownum := @rownum + 1 rownum,
     ...
     ...
     ...
     GROUP_CONCAT( tour_foreign_residence.name_re 
           ORDER BY tour_foreign_residence.name_re 
           SEPARATOR "، "
         ) AS name_re_all
  FROM   tour_foreign 
    INNER JOIN tour_foreign_residence 
  ON ( tour_foreign.id = tour_foreign_residence.relation )
    JOIN (SELECT @rownum := 0) r
  WHERE  tour_foreign.name LIKE "%' . $find . '%" 
  GROUP BY  tour_foreign.id 
--  HAVING name_re_all LIKE "%' . $find . '%"
) t
WHERE FIND_IN_SET('11111', name_re_all)

【讨论】:

  • 看到这里是我的更改 sql 和错误得到:pastebin.com/sHaPwebk
  • 子查询!您不能在 WHERE 相同的子句中使用字段别名。
  • 不,这种方式行不通,不是我想要的。我应该使用 %$find% 而不是 '11111'
  • 您知道解决此问题的其他方法吗?用php做不到吗?
  • 还有另一种方法,但这个变体是有效的。创建一个简单的表并尝试使用它。
猜你喜欢
  • 1970-01-01
  • 2011-04-17
  • 2011-06-01
  • 2015-07-14
  • 1970-01-01
  • 2012-07-14
  • 2018-04-21
  • 2013-11-21
  • 2014-12-22
相关资源
最近更新 更多