如何使用SQL UNION分离SQL表的输出


How can I separate the output of SQL tables using SQL UNION?

我在一个数据库中有几个表,每个表都包含完全相同的列名。我使用SQLUNION是为了从所有这些表中提取每条记录,并将这些记录输出到网页上。每个记录都在ID为"contributors"的div之间输出

我最终要做的是在正在输出的每个表之间设置某种分隔,这样我就不会让表中的每个记录都无缝地运行到下一个表中。

我试图在"contributors"div之前回显一个div,但没有成功。有人知道我如何从issue1输出数据,然后在下面创建一个标题来将issue1和issue2分开吗?

<?php
$res=mysql_query('
SELECT First, Last, Title, StoryLink, Genre, About, Link, Picture, ALT FROM issue1 UNION ALL
SELECT First, Last, Title, StoryLink, Genre, About, Link, Picture, ALT FROM issue2 UNION ALL
SELECT First, Last, Title, StoryLink, Genre, About, Link, Picture, ALT FROM issue3
');
if (!$res) { // add this check.
    die('Invalid query: ' . mysql_error());
}
while($row=mysql_fetch_array($res))
{
$cont_img_path = $img_path.end(explode('/', $row['Picture']));
if(file_exists($cont_img_path))
{
?>
    <div class="contributors">
        <h6><?php echo $row['First']; ?> <?php echo $row['Last']; ?></h6>
        <h2 style="color:#ffffff;"><em><?php echo $row['Title']; ?></em></h2>
        <p style="color:#ffd997;"><?php echo $row['Genre']; ?></p>
<h3 class="ctr-image"><a href="<?php echo $row['Picture']; ?>" id="3e-fancybox" name="<?php echo $row['First'] .' '. $row['Last']; ?>" StoryLink="<?php echo $row['StoryLink']; ?>" Ptitle="<?php echo $row['Title']; ?>" genre="<?php echo $row['Genre']; ?>" about="<?php echo str_replace('"', '&#34;', ($row['About'])); ?>" WebLink="<?php echo $row['Link']; ?>"><img src="<?php echo $row['Picture']; ?>" alt="<?php echo $row['ALT']; ?>"></a></h3>
    </div>
<?php } } ?>

尽管如果您想要三个独立的结果集,使用AJAX并发出三个独立请求更有意义,但这里有一个解决方案:

$res = mysql_query('
SELECT 
      'Issue1' as context,
      First, 
      Last, 
      Title, 
      StoryLink, 
      Genre, 
      About, 
      Link, 
      Picture, 
      ALT 
FROM 
    issue1 
UNION ALL
SELECT 
      'Issue2' as context,
      First, 
      Last, 
      Title, 
      StoryLink, 
      Genre, 
      About, 
      Link, 
      Picture, 
      ALT 
FROM 
    issue2 
UNION ALL
SELECT 
      'Issue3' as context,
      First, 
      Last, 
      Title, 
      StoryLink, 
      Genre, 
      About, 
      Link, 
      Picture, 
      ALT 
FROM 
      issue3
)';

正如所问的那样,这解决了问题,但是我不相信您的数据库结构一开始是正确的。

在查询中添加另一列,例如:

SELECT Title, 'issue1' FROM issue1 UNION ALL
SELECT Title, 'issue2' FROM issue2

那么你的代码可能有点像

print header for 'issue1'
for each 'issue1' in results
    display row
print header for 'issue2'
for each 'issue2' in results
    display row

我认为联合的想法是让它返回一组无缝的结果。

除了运行三个单独的查询来获得结果外,您还可以计算每个查询返回的行数,并在计数器达到行数时在while循环中添加<br/>标记或其他内容。