Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 只循环结果的一部分_Php_Sql_Loops_Select - Fatal编程技术网

Php 只循环结果的一部分

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/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
    (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的建议更有效的方法吗?我想说六个半其他的。