php/SQL - 在许多条件下每4个名字之间打印4次

aut*_*ate 12 php mysql

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

但是这个问题和之前的问题之间的差异,我想在许多俱乐部名称中建立一个集体球员或一组球员,例如:

El Ahly俱乐部的名字有一个12球员,我想将它拆分成3 teams每个team都有4球员什么,我想看看有多少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        |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)

在这个例子中,2 groups of **ANY WORD**因为它的a 6 group和把它们放在8不可变的组中,它们在48163264128256数字中找到......并且在相邻的2 **ANY WORD**或2之间没有相邻的club_name

例子 :

4名球员作为一名球员

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

+----+------+---------------------+
|   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        |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)

结论:

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        |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)

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        |
+--------------+------------------+
Run Code Online (Sandbox Code Playgroud)

等等

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
Run Code Online (Sandbox Code Playgroud)

结合数据过滤后:

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
Run Code Online (Sandbox Code Playgroud)

输出类似的东西:

+----+------+---------------------+
|   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       |
+----+------+--+------------------+
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 !

Wal*_*row 2

我读过你的上一篇文章和这篇文章。如果我明白了这个想法,基本的事情就是你有球队,你有球员,你想以某些标准化分组(可以这么说)显示数据。

嗯,有一个恒定的数据,您总是要与该数据进行比较,即团队的规模。

我要做的是创建一个子查询,将球队与球员数量分组,并以某种方式使用它,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

当在 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.
}

?>
Run Code Online (Sandbox Code Playgroud)

使用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']);
}

}

?>
Run Code Online (Sandbox Code Playgroud)

我希望我答对了你的问题。我正在快速完成这个任务,但我认为这会有所帮助!