php/SQL - 在每 4 个名称之间打印多个单词 4 次,有很多条件

标签 php mysql

我在此主题之前已经问过这个问题,请仔细阅读sql-print-many-word-between-every-columns-with-many-conditions

但是这个问题和上一个问题之间的区别是我想在许多俱乐部名称中创建一个集体球员或一组球员:

El Ahly俱乐部名称有12玩家我要拆分成3 teamsteam4玩家我要数多少team每个俱乐部的名字里面 然后将它们放入不可变数字(组)4 8 16 32 64 128 256基于 teams 的数量打印 **ANY WORD**在使用 select full_name,club_name from players where y_of_birth=2000 过滤数据后,它们之间会出现类似的情况所需的输出应该是这样的:

更新:

+----+------+---------------------+
|   full_name  |  club_name       |
+--------------+------------------+
| Ahmed Sayed  |   El Ahly        |
+--------------+------------------+
| Kareem Gaber |   El Ahly        |
+--------------+------------------+
| Maher Zein   |   El Ahly        |
+--------------+------------------+
| Mohab Saeed  |   El Ahly        |
+----+------+--+------------------+
| ahmed shawky |   Petroget       |
+--------------+------------------+
| shaker ali   |   Petroget       |
+--------------+------------------+
| omar Saed    |   Petroget       |
+--------------+------------------+
| moataz Gamal |   Petroget       |
+------+-------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| husein mazen |   Cocorico       |
+--------------+------------------+
| hassan maged |   Cocorico       |
+--------------+------------------+
| maged ahmoud |   Cocorico       |
+--------------+------------------+
| zakareya gad |   Cocorico       |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| gamel kamel  |   El Ahly        |
+--------------+------------------+
| omar galal   |   El Ahly        |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| khaled zein  |   Petroget       |
+--------------+------------------+
| shady sameer |   Petroget       |
+--------------+------------------+
| wahed mahmoud|   Petroget       |
+--------------+------------------+
| samy shahen  |   Petroget       |
+----+------+--+------------------+
| Mohamed gad  |   El Ahly        |
+----+------+--+------------------+
| ehab zeyad   |   El Ahly        |
+----+---------+------------------+
| moaz maged   |   El Ahly        |
+--------------+------------------+
| mazen mahmod |   El Ahly        |
+--------------+------------------+

在这个例子中,有 2 groups of **ANY WORD**因为它是 6 group并将它们放入84 中发现的不可变组或 8163264128256数字...并且 2 **ANY WORD** 之间没有相邻或两个相邻的 club_name

示例:

4 个玩家作为一个玩家

如果 select full_name,club_name from players where y_of_birth=2000 之后的结果是 12玩家的意思12 players = 3 groups因为每个组都有4玩家下一步打印**ANY WORD**在 3 个组之间 4 次(注意:**ANY WORD** 是这些组之一)所以输出将是这样的:

+----+------+---------------------+
|   full_name  |  club_name       |
+--------------+------------------+
| Ahmed Sayed  |   El Ahly        |
+--------------+------------------+
| Kareem Gaber |   El Ahly        |
+--------------+------------------+
| Maher Zein   |   El Ahly        |
+--------------+------------------+
| Mohab Saeed  |   El Ahly        |
+----+------+--+------------------+
| ahmed shawky |   Petroget       |
+--------------+------------------+
| shaker ali   |   Petroget       |
+--------------+------------------+
| omar Saed    |   Petroget       |
+--------------+------------------+
| moataz Gamal |   Petroget       |
+------+-------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| gamel kamel  |   El Ahly        |
+--------------+------------------+
| omar galal   |   El Ahly        |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+

结论:

4 8 16 32 64 128 256是不可变的组

group 4应填写16拥有 **ANY WORD** 的玩家他们之间没有类似的东西:

+----+------+---------------------+
|   full_name  |  club_name       |
+--------------+------------------+
| Ahmed Sayed  |   El Ahly        |
+--------------+------------------+
| Kareem Gaber |   El Ahly        |
+--------------+------------------+
| Maher Zein   |   El Ahly        |
+--------------+------------------+
| Mohab Saeed  |   El Ahly        |
+----+------+--+------------------+
| ahmed shawky |   Petroget       |
+--------------+------------------+
| shaker ali   |   Petroget       |
+--------------+------------------+
| omar Saed    |   Petroget       |
+--------------+------------------+
| moataz Gamal |   Petroget       |
+------+-------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| gamel kamel  |   El Ahly        |
+--------------+------------------+
| omar galal   |   El Ahly        |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+

group 8应填写32拥有 **ANY WORD** 的玩家他们之间没有类似的东西:

+----+------+---------------------+
|   full_name  |  club_name       |
+--------------+------------------+
| Ahmed Sayed  |   El Ahly        |
+--------------+------------------+
| Kareem Gaber |   El Ahly        |
+--------------+------------------+
| Maher Zein   |   El Ahly        |
+--------------+------------------+
| Mohab Saeed  |   El Ahly        |
+----+------+--+------------------+
| ahmed shawky |   Petroget       |
+--------------+------------------+
| shaker ali   |   Petroget       |
+--------------+------------------+
| omar Saed    |   Petroget       |
+--------------+------------------+
| moataz Gamal |   Petroget       |
+------+-------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| husein mazen |   Cocorico       |
+--------------+------------------+
| hassan maged |   Cocorico       |
+--------------+------------------+
| maged ahmoud |   Cocorico       |
+--------------+------------------+
| zakareya gad |   Cocorico       |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| gamel kamel  |   El Ahly        |
+--------------+------------------+
| omar galal   |   El Ahly        |
+--------------+------------------+
| Kamal saber  |   El Ahly        |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| **ANY WORD** |                  |
+--------------+------------------+
| khaled zein  |   Petroget       |
+--------------+------------------+
| shady sameer |   Petroget       |
+--------------+------------------+
| wahed mahmoud|   Petroget       |
+--------------+------------------+
| samy shahen  |   Petroget       |
+----+------+--+------------------+
| Mohamed gad  |   El Ahly        |
+----+------+--+------------------+
| ehab zeyad   |   El Ahly        |
+----+---------+------------------+
| moaz maged   |   El Ahly        |
+--------------+------------------+
| mazen mahmod |   El Ahly        |
+--------------+------------------+

以此类推

group 16 group 32 group 64 group 128 group 256

已编辑:

我从 Gordon Linoff 那里得到了这个查询

select p.*
from (select p.*,
             (@rn := if(@c = club_name, @rn + 1,
                        if(@c := club_name, 1, 1)
                       )
             ) as seqnum
      from players p cross join
           (select @c := '', @rn := 0) params
      order by club_name
     ) p
order by floor((seqnum - 1) / 4), club_name

结合过滤后的数据:

select p.*
from (select p.full_name,club_name,
             (@rn := if(@c = club_name, @rn + 1,
                        if(@c := club_name, 1, 1)
                       )
             ) as seqnum
      from players p  cross join
           (select @c := '', @rn := 0) params  WHERE `y_of_birth` LIKE N'%2000%'

      order by club_name
     ) p 

order by floor((seqnum - 1) / 4), club_name

输出类似的东西:

+----+------+---------------------+
|   full_name  |  club_name       |
+--------------+------------------+
| Ahmed Sayed  |   El Ahly        |
+--------------+------------------+
| Kareem Gaber |   El Ahly        |
+--------------+------------------+
| Maher Zein   |   El Ahly        |
+--------------+------------------+
| Mohab Saeed  |   El Ahly        |
+----+------+--+------------------+
| kamal mado   |   Cocorico       |
+--------------+------------------+
| hossam magdy |   Cocorico       |
+--------------+------------------+
| sayed ammar  |   Cocorico       |
+--------------+------------------+
| karem gad    |   Cocorico       |
+--------------+------------------+
| Mohamed gad  |   El Ahly        |
+----+------+--+------------------+
| ehab zeyad   |   El Ahly        |
+----+---------+------------------+
| moaz maged   |   El Ahly        |
+--------------+------------------+
| mazen mahmod |   El Ahly        |
+--------------+------------------+
| shaker ali   |   Petroget       |
+--------------+------------------+
| omar Saed    |   Petroget       |
+--------------+------------------+
| moataz Gamal |   Petroget       |
+--------------+------------------+
| gamael zayed |   Petroget       |
+--------------+------------------+
| husein mazen |   Cocorico       |
+--------------+------------------+
| mazen kamal  |   Cocorico       |
+--------------+------------------+
| maged ahmoud |   Cocorico       |
+--------------+------------------+
| mesho kareem |   Cocorico       |
+--------------+------------------+
| mano mazen   |   Petroget       |
+--------------+------------------+
| shady srour  |   Petroget       |
+--------------+------------------+
| mamdouh gamal|   Petroget       |
+--------------+------------------+
| khaled zein  |   Petroget       |
+--------------+------------------+
| husein mazen |   Cocorico       |
+--------------+------------------+
| hassan maged |   Cocorico       |
+--------------+------------------+
| maged ahmoud |   Cocorico       |
+--------------+------------------+
| zakareya gad |   Cocorico       |
+--------------+------------------+
| shady sameer |   Petroget       |
+--------------+------------------+
| wahed mahmoud|   Petroget       |
+--------------+------------------+
| samy shahen  |   Petroget       |
+----+------+--+------------------+
| abdo samy    |   Petroget       |
+----+------+--+------------------+

任何帮助将不胜感激!

最佳答案

我阅读了您之前的帖子和这一篇。如果我明白了,最基本的事情是你有团队,你有球员,你想在某些标准化分组中显示数据(可以这么说)。

好吧,有一个恒定的数据,您总是将其与团队规模进行比较。

我会做的是创建一个子查询,将团队与球员计数分组,并以如下方式使用它:

select t.*
       , x.total_players
       -- , row_number() over(order by t.team_name) row_id
from team_table t
    join (
          select team_id
                , count(1) total_playerss
          from team_table 
          group by team_id
         ) x on x.team_id = t.team_id
order by t.team_name

当在 PHP 中回显结果集时,您可以构建一些函数,例如:

<?php

function add_some_word($playerCount) {

if ($playerCount >4 && $playerCount <= 8) {
echo '*** SOME WORD***';
echo '*** SOME WORD***';
echo '*** SOME WORD***';
}
else if ($playerCount >4 && $playerCount <= 8) {
echo '*** SOME WORD***';
echo '*** SOME WORD***';
}
// etc.
}

?>

使用结果集中的 row_id,您可以看到团队何时开始和结束。

所以当它吐出行时,它可能是这样的:"

<?php

$currentTeamName = "";

while ($row = pg_fetch_array($result,null,PGSQL_ASSOC)) {
// echo data you would normally send out

if ($currentTeamName != $row['team_name']) {
add_some_word($row['total_players']);
}

}

?>

希望我答对了你的问题。我正在快速解决这个问题,但我认为它会有所帮助!

关于php/SQL - 在每 4 个名称之间打印多个单词 4 次,有很多条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31573922/

相关文章:

php - 使用 codeigniter 在 Twitter Bootstrap 模式中填充表单

mysql - OperationalError 在 'reading initial communication packet' DigitalOcean 失去与 MySQL 服务器的连接

mysql - 在 laravel 5.1 中将 float 更改为更精确的 float

android - 如何在 ActiveAndroid 中删除并重新创建有关数据库版本更新的所有表?

php - 获取插入到特定ID的sql中的最新行

php - Linux串口通信,php脚本问题

php - 从 Symfony 命令调用服务失败并出现 "The container cannot be retrieved as the application instance is not yet set."错误,为什么?

javascript - AngularJS 通过文本设置选定选项

php - Laravel 邮件与 g 套件和 XOAUTH2

mysql - 为什么操作数应该只包含一列?