Вот упрощенный код, похожий на то, что я использую. В этом я вытаскиваю имена из идентификаторов.Предопределенный счетчик, не обновляющийся в операторе select
$counter = 0;
$select = "SELECT nID,nName WHERE nID = $counter";
$result = sqlsrv_query($connection, $select);
$maxusers = 10;
while($counter<$maxusers) {
while($row = sqlsrv_fetch_array($result)) {
echo $row['nName'];
}
$counter++
}
Что я получаю такое же имя, счетчик в операторе отбора остается на 0.
я должен был поставить определение $ оператора выбора и $ результат внутри цикла, он переопределяет все, каждый раз, когда мы вводим цикл while, выглядит как код ниже. Это не кажется мне практичным и оптимальным. Каковы наилучшие условия для таких ситуаций? Я не очень хорошо знаком с областями переменных в PHP, я не нашел хорошей документации по этому вопросу, когда речь заходит о функциях sql.
$counter = 0;
$maxusers = 10;
while($counter<$maxusers) {
$select = "SELECT nID,nName WHERE nID = $counter";
$result = sqlsrv_query($connection, $select);
while($row = sqlsrv_fetch_array($result)) {
echo $row['nName'];
}
$counter++
}
Вот код, который я на самом деле написал.
$selectFirst = "SELECT TOP 1 nDateTime,nUserID FROM TB_EVENT_LOG WHERE nUserID = $usercounter AND nDateTime BETWEEN $today AND $tomorrow";
$selectLast = "SELECT TOP 1 nDateTime,nUserID FROM TB_EVENT_LOG WHERE nUserID = $usercounter DateTime BETWEEN $today AND $tomorrow DESC";
$resultFirst = sqlsrv_query($bscon, $selectFirst);
$resultLast = sqlsrv_query($bscon, $selectLast);
$selectnumberofUsers = "SELECT TOP 1 nUserIdn FROM TB_USER ORDER by nUserIdn DESC";
$usersmaxq = sqlsrv_query($bscon, $selectnumberofUsers);
$usersmax = sqlsrv_fetch_object($usersmaxq)->nUserIdn;
while($usercounter<$usersmax){
$usercounter = $usercounter + 1;
while($rowfirst = sqlsrv_fetch_array($resultFirst)) {
$intime = $rowfirst['nDateTime'];
}
echo $intime." ".$usercounter."<br />";
}
Это не точный код, который я использую. Я просто написал это как упрощение. Исправлено, спасибо. – masfrost
Вам нужен счетчик? Не могли бы вы просто выбрать «WHERE nID> = $ min AND nID <$ maxusers»? – khartnett
Это не работает. Мой реальный оператор select: '$ selectFirst =" SELECT TOP 1 nDateTime, nUserID FROM TB_EVENT_LOG WHERE nUserID = $ usercounter AND nDateTime BETWEEN $ today AND $ tomorrow ";'. Мне нужна первая запись только для каждого пользователя. Если есть способ получить только первую строку для каждого nUserID в моей инструкции select. – masfrost