我有以下Mysql表和PHP代码。
MySQL:我从Store表中选择商店数量。这将返回我的商店列表。
我还有一个带信息的现金表
PHP: 循环发生在一天,假设是一天中的天数。
在while循环中,我执行一个SQl选择,根据日期和商店从cashup表中返回我的值。
在循环中,我增加了我的日子以允许在我的所有商店中循环31天以返回现金金额值。
//loop days
$numberofdays = 31;
$monthyear = NOV_2016;
$x = 1;
//loop days
do {
//string days info
$thedate = $x . '_' . $monthyear;
if (strlen($thedate) == 10){
$thedate = '0' . $thedate;
}
//Do select
mysql_select_db($database_localhost, $localhost);
$query_showr = "select sum(cashup_cash) from cashiercashdata where cashup_date LIKE '$thedate' and cashup_store = '$store'";
$showr = mysql_query($query_showr, $localhost) or die(mysql_error());
while ($row_showr = mysql_fetch_assoc($showr))
{
//loop through record rows
foreach($row_showr as $row)
{
///////$insertday = "recon_d" . $x . "_received";
echo " Store : " . $store . " Counter : " . $x . ' : ' . gettype($x) . ' : ' . $row . ' : ' . gettype($row) . '<br>';
mysql_query("
update bankrecon
set recon_d10_received = '$row'
WHERE recon_store = '$store'
and recon_month = '$monthyear'
");
}
}
$x++;
} while ($x <= $numberofdays);
PHP: 发生循环,其中numberofdays(整数)假设为一个月中的天数。
在while循环中,我执行一个SQl选择,根据日期和商店从cashup表中返回我的值。
在循环中,我增加了我的日子以允许在我的所有商店中循环31天以返回现金金额值。
这个回显正确显示我的信息,但是如果numberofdays设置为静态10,我在循环中的更新只会插入信息;
Store : centralpark Counter : 10 : integer : 56277.40 string
Store : ficksburg Counter : 10 : integer : 42698.14 string
Store : kroonstad Counter : 10 : integer : 28486.70 string
Store : maitland Counter : 10 : integer : 55988.40 string
Store: od Counter : 10: integer 41412.10 string
它在显示时工作正常但不更新目标表。 任何人都可以向我解释为什么循环的numberofdays信息不会触发列的更新,但如果numberofdays是静态的,它会更新。
答案 0 :(得分:0)
现在,很难确切地知道你的目标表是什么样的,但我猜它与你的UPDATE语句有关。
update bankrecon
set recon_d10_received = '$row'
WHERE recon_store = '$store'
and recon_month = '$monthyear'
特别是这一点:set **recon_d10_received** = '$row'
这或许告诉桌子只在第10天更新吗?
答案 1 :(得分:0)
两个示例表sql:
#include <stdio.h>
int main()
{
char sentence [100];
int i,letter_count=0;
printf("Enter a sentence: ");
fgets(sentence,100,stdin);
for(i=0;sentence [i]!='\0';i++)
{
if(sentence [i]==' ' || sentence [i+1]=='\0')
{
if(letter_count%2==1)
{
printf("%c ",sentence [i-letter_count/2-1]);
}
letter_count=0;
}
else
{
letter_count++;
}
}
putchar('\n');
return 0;
}
和php本身:
CREATE TABLE `bankrecon` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`recon_d10_received` varchar(45) DEFAULT NULL,
`recon_store` varchar(45) DEFAULT NULL,
`recon_month` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `data and store` (`recon_store`,`recon_month`,`recon_d10_received`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
CREATE TABLE `cashiercashdata` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cashup_cash` int(11) DEFAULT NULL,
`cashup_date` varchar(45) DEFAULT NULL,
`cashup_store` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
请记住:
session_start();
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$mysqli = new mysqli("localhost", "someuser", "somepass", "somedb");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$store = 'somestrome';
$numberofdays = 31;
$monthyear = 'NOV_2016';
$x = 1;
//loop days
do {
//string days info
$thedate = $x.'_'.$monthyear;
if (strlen($thedate) == 10) {
$thedate = '0'.$thedate;
}
$showr = $mysqli->query("select sum(cashup_cash) as cashup_cash from cashiercashdata where cashup_date LIKE '$thedate' and cashup_store = '$store'")->fetch_assoc();
if(!is_null($showr['cashup_cash'])){
$sql = " INSERT INTO bankrecon (recon_d10_received,recon_store,recon_month) VALUES ('".$showr['cashup_cash']."','$store','$monthyear') ON DUPLICATE KEY UPDATE recon_d10_received='".$showr['cashup_cash']."'";
$mysqli->query($sql);
echo " Store : ".$store." Counter : ".$x.' : '.gettype($x).' : '.$showr['cashup_cash'].' : '.gettype($showr['cashup_cash']).'<br>';
}
$x++;
} while ($x <= $numberofdays);
,recon_store
,recon_month
列上保留UNIQUE KEY。 还可以使用此PHP代码查看更多错误:
recon_d10_received