Php 只循环结果的一部分
我对PHP/SQL相当陌生,我知道这可能是一个基本问题,但我找不到答案。我正在成功地从以下查询返回一个结果数组,但是,我只希望返回的部分数据循环:Php 只循环结果的一部分,php,sql,loops,select,Php,Sql,Loops,Select,我对PHP/SQL相当陌生,我知道这可能是一个基本问题,但我找不到答案。我正在成功地从以下查询返回一个结果数组,但是,我只希望返回的部分数据循环: <?php $result = mysqli_query($con," SELECT LastName AS sLast, FirstName AS sFirst, b.date AS dDate, b.name AS dName, a.wk1places AS eWk1 FROM students LEFT JOIN (SE
<?php $result = mysqli_query($con,"
SELECT LastName
AS sLast, FirstName
AS sFirst, b.date AS
dDate, b.name AS
dName, a.wk1places
AS eWk1
FROM students
LEFT JOIN
(SELECT id, name, wk1places
FROM employers)
a ON a.id = $e_id
LEFT JOIN
(SELECT id, date, name
FROM dates)
b ON b.id = 1
WHERE WK1 = a.name");
$wk1 = mysqli_num_rows($result);
while($row = mysqli_fetch_array($result)) { ?>
<div style="float:left">
Week <?php echo $row['dName'] ;?><br>
<?php echo $row['dDate'] ;?>
<!-- THIS DATA TO LOOP -->
<p>
<?php echo $row['sLast'] ;?>, <?php echo $row['sFirst'] ;?>
</p>
<!-- / -->
<?php echo $wk1 ?> / <?php echo $row['eWk1'] ;?>
<?php }?>
每周
,
/
包含在
中的代码应该循环,但是上面和下面的回显行应该保持不变,不能重复。任何帮助都将不胜感激!!谢谢:)只循环部分结果没有什么意义
这里应该做的是更改SQL查询以仅返回所需的数据,从而使循环高效
因此,请专注于SQL查询:
SELECT LastName
AS sLast, FirstName
AS sFirst, b.date AS
dDate, b.name AS
dName, a.wk1places
AS eWk1
FROM students
LEFT JOIN
(SELECT id, name, wk1places
FROM employers)
a ON a.id = $e_id
LEFT JOIN
(SELECT id, date, name
FROM dates)
b ON b.id = 1
WHERE WK1 = a.name"
并添加限制数据的额外子句。如果需要:
$wk1 = mysqli_num_rows($result);
$html = '';
while ($row = mysqli_fetch_array($result)) {
?>
$dName = $row['dName'];
$dDate = $row['dDate'];
$eWk1 = $row['eWk1'];
<!-- THIS DATA TO LOOP -->
$html .= '<p>'.$row['sLast'].', '.$row['sFirst'].'</p>';
<!-- / -->
<?php } ?>
<div style="float:left">
Week <?php echo $dName; ?><br>
<?php echo $dDate; ?>
<?php echo $html;?>
<?php echo $wk1 ?> / <?php echo $eWk1; ?>
$wk1=mysqli\u num\u行($result);
$html='';
while($row=mysqli\u fetch\u数组($result)){
?>
$dName=$row['dName'];
$dDate=$row['dDate'];
$eWk1=$row['eWk1'];
$html.=''.$row['sLast'].','.$row['sFirst'.].';
每周
/
如果除了sLast
和sFirst
之外,所有值都相同,则取第一行输出循环前后的数据,并使用data\u seek(0)
重置mysql结果
$wk1 = mysqli_num_rows($result);
$first_row = mysqli_fetch_array($result);
?>
<div style="float:left">
Week <?php echo $first_row['dName'] ;?><br>
<?php echo $first_row['dDate'] ;?>
<?php
$result->data_seek(0);
while( $row = mysqli_fetch_array($result) ) { ?>
<p>
<?php echo $row['sLast'] ;?>, <?php echo $row['sFirst'] ;?>
</p>
<?php } ?>
<?php echo $wk1; ?> / <?php echo $first_row['eWk1']; ?>
$wk1=mysqli\u num\u行($result);
$first_row=mysqli_fetch_数组($result);
?>
每周
,
/
如果在循环外部对结果进行第一次读取后使用do while
循环,则可以从第一次读取中捕获两个重复字段,然后仅循环数据,从中选择要使用的内容
由于while测试是在循环结束时而不是开始时完成的,因此第一行作为在循环外部执行的结果读取的一部分进行处理,并且在循环内部的代码中只使用您感兴趣的两个字段
$wk1 = mysqli_num_rows($result);
if ( $wk1 > 0 ) :
$row = mysqli_fetch_array($result);
$eWk1 = $row['eWk1'];
echo '<div style="float:left">Week ';
echo $row['dName'] . '<br>' . $row['dDate'];
do {
echo '<p>' . $row['sLast'] . ', ' . $row['sFirst'] . '</p>';
} while ($row = mysqli_fetch_array($result));
echo $wk1 . ' / ' . $eWk1;
endif;
?>
$wk1=mysqli\u num\u行($result);
如果($wk1>0):
$row=mysqli\u fetch\u数组($result);
$eWk1=$row['eWk1'];
回声“周”;
echo$row['dName'].
.$row['dDate'];
做{
回显“”.$row['sLast']”、“.$row['sFirst']”。”;
}而($row=mysqli_fetch_数组($result));
echo$wk1.'/.$eWk1;
endif;
?>
你说的“应该保持不变”是什么意思?它们包含动态值。请显示预期结果。提取while
循环外的第一行。@colburton唯一更改的值是sLast和sFirst。所有其他值保持不变,因此是重复的。我只希望它们显示一次。@Phil:它们来自$row
,这使它们成为动态的。@colburt有没有办法阻止他们循环?这可能是一个愚蠢的问题,但如何限制左连接?就是这样!!太棒了。谢谢!!这也很有效。这是一种比@Danijel的建议更有效的方法吗?我想说六个半其他的。