Php 并排显示一条Union语句

Php 并排显示一条Union语句,php,css,mysql,Php,Css,Mysql,因此,我有以下Select语句: SELECT game_name, status, OS FROM mobile_version_sports UNION ALL SELECT game_name, status, OS FROM android_sports 由此,我得到以下输出: Dragons APPROVED IOS Dragons APPROVED ANDROID 有了它,我就有了一个PHP页面,它可以显示所有内容,并使用少量CSS来简单地更改选项卡的颜色。在

因此,我有以下Select语句:

SELECT game_name, status, OS 
FROM mobile_version_sports 
UNION ALL 
SELECT game_name, status, OS 
FROM android_sports
由此,我得到以下输出:

Dragons APPROVED    IOS
Dragons APPROVED    ANDROID
有了它,我就有了一个PHP页面,它可以显示所有内容,并使用少量CSS来简单地更改选项卡的颜色。在该PHP中,我有以下代码:

 foreach($q as $row2){
    print "<tr><td>".$row2['game_name']."</td>";
    print "<td class=".$row2['mobile_version_sports.status'].">".$row2['OS.mobile_version_sports']." 
 </td>";
    print "<td class=".$row2['status.android_sports'].">".$row2['OS.android_sports']."</td></tr>";
}

您应该能够通过使用
JOIN
来获得所需的内容

选择手机版本\u sports.game\u名称,
移动版运动状态作为移动版运动状态,
mobile_version_sports.OS作为mobile_version_sports_OS,
android_sports.status作为android_sports_status,
android_sports.OS作为android_sports_OS
从手机版到体育版
加入安卓体育
在移动版上\u sports.game\u name=android\u sports.game\u name
SQL Fiddle:

根据您的编辑,您的PHP代码如下所示:

foreach($q作为$row2){
打印“$row2[“游戏名称]”;
打印“%$row2[“移动版体育版”]
";
打印“$row2['android_sports_OS'”;
}

这将有望让你走上正确的方向。

如你的评论所示,在这里做一些假设:

  • game\u name
    可用作链接两个表的键
  • mobile\u version\u sports
    仅支持iOS游戏
  • android_sports
    仅支持android游戏
因此,根据这些假设,您可能会更幸运地使用这样一个查询,它执行类似于完全外部联接的操作:

SELECT i.game_name, i.status AS iOSStatus, a.status AS androidStatus, 
  i.OS IS NOT NULL AS iOS,
  a.OS IS NOT NULL AS android
FROM mobile_version_sports i
  LEFT JOIN android_sports a ON a.game_name = i.game_name
UNION
SELECT a.game_name, i.status AS iOSStatus, a.status AS androidStatus,
  i.OS IS NOT NULL AS iOS,
  a.OS IS NOT NULL AS android
FROM mobile_version_sports i
  RIGHT JOIN android_sports a ON a.game_name = i.game_name


PHP代码示例:

foreach($q as $row2){
  print "<tr><td>".$row2['game_name']."</td>";

  print "<td>";
  print $row2['iOS'] ? '<span class="' . $row2['iOSStatus'] . '">iOS</span>' : '';
  print $row2['android'] ? '<span class="' . $row2['androidStatus'] . '">Android</span>' : '';
  print "</td></tr>";
}
foreach($q作为$row2){
打印“$row2[“游戏名称]”;
打印“”;
打印$row2['iOS']?'iOS':'';
打印$row2['android']?'android':'';
打印“”;
}

如果两张表之间的游戏名称始终匹配,请尝试使用此简短而简单的代码。否则,请将左连接与一些
ifnull(a.status,'NOT')一起用作\u status
stations:

   SELECT m.game_name,       
          m.OS AS m_OS,
          m.status AS m_status,
          a.OS AS a_OS,
          a.status AS a_status
    FROM mobile_version_sports as m
         JOIN android_sports as a
            ON m.game_name = a.game_name group by m.game_name;

表上是否有一个键指示它们是同一个游戏,或者游戏名称都是唯一的?游戏名称就是链接它们的东西。它不是一个键,但它们是镜像副本,
OS
mobile\u version\u sports
表中保存什么类型的值?这个分开的表结构看起来很奇怪。它只保存IOS的文本。您是否控制这个数据库?有没有理由不把这两张桌子放在一起?似乎这会大大简化您的问题。当我尝试运行时,我得到以下结果:结果:在“分隔符”附近:第1行出现语法错误:选择游戏名称、组名称(操作系统分隔符)确保您的查询显示为-GROUP\u CONCAT(操作系统分隔符“”)作为OS@Pittsiesqlite mysqlThis删除结果中提到的需要的状态。不同表上的状态可能不同,因此不起作用。如果有人否决了此答案,请说明原因。如果添加或需要更多操作系统,则这样做不容易扩展。如果添加更多操作系统,则会添加两个colums和两个位置每次更新。您的假设是正确的。但是我更需要PHP代码中所需的结果,因为它使用CSS根据Status@Alex根据OP在评论和问题中告诉我们的内容所做的假设,因此不需要进行扩展。@Pittsie,对于给定的我可以给你举个例子,但你可能需要做一些工作,而不仅仅是复制和粘贴
   SELECT m.game_name,       
          m.OS AS m_OS,
          m.status AS m_status,
          a.OS AS a_OS,
          a.status AS a_status
    FROM mobile_version_sports as m
         JOIN android_sports as a
            ON m.game_name = a.game_name group by m.game_name;