【问题标题】:Query to get especific data from custom search查询以从自定义搜索中获取特定数据
【发布时间】:2017-11-23 18:19:57
【问题描述】:

我正在编写一个自定义搜索框来查找星际争霸游戏,但我不知道如何进行查询。例如,用户搜索“玩家:daniel,玩过:'x' 地图上的 zerg vs terran 玩家”

所以我有这个表:

桌面游戏

+------------+----------+-------------+----------+
|  game_id   |   map    |    match    |  winner  |
+------------+----------+-------------+----------+
|     7      |     y    |     1v1     |    1     |
|     8      |     x    |    1v1v1    |    2     |
|     9      |     w    |    1v1v1    |    3     |
|     10     |     x    |     1v1     |    1     |
+------------+----------+-------------+----------+

桌面玩家

+------------+----------+-------------+----------+
|  game_id   |  player  |Civilization |  team    |
+------------+----------+-------------+----------+
|     7      |  Arturo  |   protos    |    1     |
|     7      |  Daniel  |   zerg      |    2     |
|     8      |  Ale     |   Terran    |    1     |
|     8      |  Maria   |   Protos    |    2     |
|     8      |  Daniel  |   zerg      |    3     |
|     9      |  Pablo   |   zerg      |    1     |
|     9      |  Ale     |   protos    |    2     |
|     9      |  Maria   |   protos    |    3     |
|     10     |  Daniel  |   zerg      |    1     |
|     10     |  Oscar   |   terran    |    2     |
+------------+----------+-------------+----------+

通过正确的查询,我必须得到:

Game_id: 8, 1v1v1, daniel (zerg) vs maria (protos) vs ale (terran), map: x
Game_id:10, 1v1, daniel (zerg) vs oscar (terran), map: x

这里的问题是我如何在存在丹尼尔玩家和虫族文明并且对手在同一个game_id中拥有人族文明的情况下获得游戏??!而且游戏也是在x地图上玩的?

PD:正如您所注意到的,每个游戏都可以有不同规模的玩家。请帮忙。非常感谢

【问题讨论】:

  • 这闻起来像家庭作业。你有没有尝试过?
  • 什么都没有,我不知道怎么做 :(
  • 至少,您还应该包括预期的输出。

标签: mysql


【解决方案1】:

试试这个select g.game_id, GROUP_CONCAT(CONCAT(p.player,'(', p.Civilization, ')-',g.map) SEPARATOR ' vs ') from games as g join players p on p.game_id = g.game_id where g.map = 'x' group by g.game_id;

【讨论】:

  • 感谢您的回复,但它只获取 map = x 的行列表:(
  • 您到底希望用户搜索什么?因此,可以在查询中进行修改
  • 用户可以按玩家、按地图、按玩家的文明和敌人的文明进行搜索。和上面的例子一样
  • 您可以获取一个搜索关键字变量,然后可以传入查询,因此无论用户搜索什么,您都可以映射到您想要的列并可以获得结果,例如,如果用户搜索玩家姓名,同样您也可以使用其他值 " select g.game_id, GROUP_CONCAT(CONCAT(p.player,'(', p.Civilization, ')-',g.map) SEPARATOR ' vs ')从游戏作为 g 加入玩家 p 在 p.game_id = g.game_id where (p.player like '%deniel%' OR g.map like '%deniel%' OR p.Civilization like '%deniel%') group by g .game_id;"
  • 是的,就像你说的那样。我有从搜索框中获取参数的 php 代码,但我的问题是我不知道如何进行查询以获取精确的游戏,其中存在一个具有“y”文明的“x”玩家和他的对手有“z”公民。正如您在玩家表中看到的那样,每个玩家都有一行,那么如何获得呢?如果我只是在同一行中获得一个具有特定文明的特定玩家,这对我来说很容易,但是如果我还需要搜索对手具有特定文明的游戏(在另一行但具有相同的 game_id)。我不知道该怎么做:(
猜你喜欢
  • 1970-01-01
  • 2016-06-18
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多