PHP Multiarray LOOP ГДЕ КЛАУЗ - PullRequest
0 голосов
/ 04 января 2012

Эй, ребята, я хотел бы повторить это утверждение 13 раз, изменив это утверждение в цикле или что-то в этом роде."WHERE spending.SectorID = 1,2,3,4,5,6,7,8,9,10,11,12,13" как мне успешно это сделать, не набирая этот код еще 12 раз.и я хотел бы отображать данные по отдельности, хотя ~ как where sectorid = 1; принадлежат таблице с кнопкой для запуска этого конкретного запроса

<?php
$spendingname= array();
$spendingpercent = array();
$spendingid = array();

mysql_select_db($database_conn2, $conn2);
$query_Spending = "SELECT CONCAT(spending.SectorID, spending.ExpenditureID) AS 'SpendingID',
expenditure.ExpenditureName, spending.SpendingPercent, spending.SectorID
FROM spending   
INNER JOIN expenditure ON spending.ExpenditureID = expenditure.ExpenditureID
WHERE spending.SectorID = 1";
$Spending = mysql_query($query_Spending, $conn2) or die(mysql_error());
$totalRows_Spending = mysql_num_rows($Spending);
while($row_Spending = mysql_fetch_assoc($Spending))
{
$spendingname[] = $row_Spending['ExpenditureName'];
$spendingpercent[] = $row_Spending['SpendingPercent'];
$spendingid[]= $row_Spending['SpendingID'];
}
mysql_free_result($Spending);
?>

Ответы [ 8 ]

1 голос
/ 04 января 2012

Вы можете использовать подготовленное состояние с параметрами, а затем зациклить выполнение запроса и получение результатов.

Но я не понимаю, почему это нужно делать, если вы не хотите что-то делатьразные с разными результатами.В противном случае, почему бы вам не использовать

WHERE spending.SectorID BETWEEN 1 AND 13 ORDER BY spending.SectorID

?

1 голос
/ 04 января 2012

Одна вещь, которую вы НЕ хотите сделать, - это сделать 13 запросов к базе данных, когда одного запроса будет достаточно. Выполните запрос один раз с помощью следующего предложения WHERE, затем выполните итерации по результатам:

WHERE spending.SectorID <= 13 ";

1007 * -ИЛИ- *

WHERE spending.SectorID IN (1,2,3,4,5,6,7,8,9,10,11,12,13)";
1 голос
/ 04 января 2012
    <?php
    $spendingname= array();
    $spendingpercent = array();
    $spendingid = array();

    mysql_select_db($database_conn2, $conn2);
    for($x=1;$x<14;$x++)
    {
    $query_Spending = "SELECT CONCAT(spending.SectorID, spending.ExpenditureID) AS 'SpendingID',
    expenditure.ExpenditureName, spending.SpendingPercent, spending.SectorID
    FROM spending   
    INNER JOIN expenditure ON spending.ExpenditureID = expenditure.ExpenditureID
    WHERE spending.SectorID = $x";
    $Spending = mysql_query($query_Spending, $conn2) or die(mysql_error());
    $totalRows_Spending = mysql_num_rows($Spending);
    while($row_Spending = mysql_fetch_assoc($Spending))
    {
    $spendingname[$x] = $row_Spending['ExpenditureName'];
    $spendingpercent[$x] = $row_Spending['SpendingPercent'];
    $spendingid[$x]= $row_Spending['SpendingID'];
    }
    mysql_free_result($Spending);
    }

//To access and print all elements.
for($x=1;$x<count($spendingname);$x++)
{
echo "The value for query $x";
echo $spendingname[$x]."  ".$spendingpercent[$x]."  ".$spendingid[$x]."<br><br><br>";
}

?>
1 голос
/ 04 января 2012

Вам просто нужно обернуть основную часть скрипта в:

for ($n in range(1,13)) {

или

for ($n=1; $n<=13; $n++) {

и заменить константу 1 на $n

edit: или в зависимости от того, как вы хотите, наконец, представить данные, вы можете изменить SQL:

WHERE spending.SectorID = 1

на

WHERE spending.SectorID >= 1 AND spending.SectorID <= 13

или

WHERE spending.SectorID IN (1,2,3,4,5,6,7,8,9,10,11,12,13)

(из-за того, как работает оптимизатор MySQL, оба должны быть максимально эффективными)

0 голосов
/ 05 января 2012
<?php
$sectorcount = $row_SectorCount['COUNT(*)'];
//number of rows in database
mysql_select_db($database_conn2, $conn2);
for($x=1; $x<=$sectorcount; $x++) 
{
${'spendingname'.$x} = array();
${'spendingpercent'.$x} = array();
${'spendingid'.$x} = array();

$query_Spending = "SELECT CONCAT(spending.SectorID, spending.ExpenditureID) AS 'SpendingID',
expenditure.ExpenditureName, spending.SpendingPercent, spending.SectorID
FROM spending   
INNER JOIN expenditure ON spending.ExpenditureID = expenditure.ExpenditureID
WHERE spending.SectorID = $x";
$Spending = mysql_query($query_Spending, $conn2) or die(mysql_error());
$totalRows_Spending = mysql_num_rows($Spending);

while($row_Spending = mysql_fetch_assoc($Spending))
{
${'spendingname'.$x}[] = $row_Spending['ExpenditureName'];
${'spendingpercent'.$x}[] = $row_Spending['SpendingPercent'];
${'spendingid'.$x}[]= $row_Spending['SpendingID'];
}
mysql_free_result($Spending);
}                   
?>

Мне удалось решить эту проблему, но, тем не менее, единственное имя, которое невозможно найти имя-расхода - единственная строка, где еще проценты и идентификаторы и все целые числа. Вот почему эта проблема возникает

0 голосов
/ 04 января 2012

Если вы хотите выполнить цикл кода определенное количество раз, вы можете использовать цикл for. Вот PHP-скрипт, который можно зациклить 13 раз.

$loops = 13;
for ($i = 1; $loops <= $i; $i++) {
    //Your code//
}

Вам также следует заменить «ГДЕ траты.SectorID = 1,2,3,4,5,6,7,8,9,10,11,12,13» на «ГДЕ расходы.SectorID = $ i», и это увеличение того, что ваш оператор SQL ищет каждый раз, когда код повторяется.

Надеюсь, это поможет.

0 голосов
/ 04 января 2012

Используйте предложение IN. В частности, вы можете сделать что-то вроде WHERE spending.SectorID IN ('" . implode("','", range(1,13)) ...

0 голосов
/ 04 января 2012

WHERE spend.SectorID > 0 AND spending.SectorID < 13

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...