У меня есть массив PHP, в котором есть несколько значений, соответствующих различным баннерным объявлениям. Пусть говорят, что $a вызывается, что будет 0-м значением в массиве. У меня есть поле в показах таблицы, также называемое 0, которое содержит целое число. Я хочу называть это целое из этого поля, увеличивать его и возвращать в ту же строку.
Чтобы упростить. Я хочу вызвать количество показов, отображаемых в текущем объявлении. У объявления ad $a есть 500 показов. Я хочу увеличить это число до 501 и вернуть его в таблицу.
Надеюсь, я объяснил достаточно хорошо. Вот мой код:
$ads = array($a, $b, $c, $d, $e, $f, $g, $h, $i, $j);
$rand = rand(0,9);
print($ads[$rand]);
$writeVar = $rand;
$con = mysql_connect("localhost","delives0_ads","ads");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("delives0_ads", $con);
$sqlCmd = mysql_query("SELECT * FROM impressions ('$writeVar');");
$sqlCmd++;
mysql_query("INSERT INTO impressions ('$writeVar`) VALUES ('$sqlCmd');");
mysql_close($con);
Изменить: Вот структура в SQL
CREATE TABLE IF NOT EXISTS `impressions` (
`0` int(11) NOT NULL,
`1` int(11) NOT NULL,
`2` int(11) NOT NULL,
`3` int(11) NOT NULL,
`4` int(11) NOT NULL,
`5` int(11) NOT NULL,
`6` int(11) NOT NULL,
`7` int(11) NOT NULL,
`8` int(11) NOT NULL,
`9` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Вам не нужен запрос SELECT и UPDATE для увеличения столбца в таблице.
Просто отправьте один запрос UPDATE [пример]:
UPDATE impressions SET views = views + 1 WHERE ad_id = 3
Выбросьте весь код, который вы написали, так как ни одно из опубликованных сообщений не является правильным. Определенно не используйте таблицу базы данных, которую вы создали.
Если я могу предложить книгу или две:
http://www.amazon.com/Build-Database-Driven-Using-MySQL/dp/0980576814/ref=dp_ob_title_bk
http://www.amazon.com/Simply-SQL-Rudy-Limeback/dp/0980455251
Ну... $sqlCmd
не содержит данных, вы должны mysql_fetch_array();
(это будет извлекать данные из запроса), прежде чем начинать манипулировать данными.
http://php.net/manual/en/function.mysql-fetch-array.php
Кроме того, ваш синтаксис mysql_query();
неверен. См. Руководство: http://www.php.net/manual/en/function.mysql-query.php
mysql_select_db("delives0_ads", $con);
$sqlCmd = mysql_query("SELECT * FROM impressions WHERE `something` = '$writeVar';"); // replace something with your needed identifier in database structure
$sqlCmd = mysql_fetch_array($sqlCmd); // will fetch data in array
$yourData = $sqlCmd['what_you_want_to_get_from_table']; // what_you_want..._table is the variable you want to increment.
$yourData++;
mysql_query("UPDATE impressions SET `yourvariable` = '$yourData' WHERE `something` = '$writeVar';"); // updates data
mysql_close($con);
Если бы вы могли предоставить структуру базы данных, мы могли бы помочь вам получить идеальный script!
P.S. Не знаю, работает ли это на самом деле (не могу проверить, не использовал простой синтаксис mysql в течение длительного времени), но я думаю, что это нужно. Если это не так, проблема в $yourData = $sqlCmd[0]...
, вам просто нужно удалить [0]
.
Что-то вроде не по теме, но все еще связано с тем, что вы изучаете php/MySQL:
Из того, что я знаю, когда вы делаете запросы, лучше добавить такие вары: ' ". $var." вместо ' $var '
Чтобы лучше понять, что я говорю, я покажу вам свой код выше. Поэтому вместо:
mysql_query("SELECT * FROM impressions ('$writeVar');");
у вас будет следующее:
mysql_query("SELECT * FROM impressions ('".$writeVar."');");
Я не помню, где я это читал, но это было связано с оптимизацией скорости запроса.
$writeVar
является действительным идентификатором объявления, зачем увеличивать его? Если вы сделаете это, показ больше не будет связан с объявлением, которое его сгенерировало.