2010-12-02 11 views
0

私は、バナー広告ごとにいくつかの値を持つPHP配列を持っています。 $ aが呼び出されたとしましょう。これは配列の0番目の値です。私は表のフィールドをといい、同様にと呼ばれ、整数を保持しています。私は、このフィールドからこの整数を呼び出し、インクリメントして、同じ行に戻したいと思います。PHPでMySQLテーブルに値を挿入する

簡略化してください。現在の広告に表示されているインプレッション数を呼び出したいと思います。広告の$ 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; 
+0

@Andrei Korchagin - ファジー質問、冗長SQL、および問題のSQL構文。あなたの質問をテーブルスキーマで更新するのを忘れないでください。 – ajreal

+0

'$ writeVar'が広告の実際のIDの場合、なぜそれを増やすのですか?これを行うと、インプレッションはそれを生成した広告に関連付けられなくなります。 – prodigitalson

+0

スキーマをどのような形式にしたいですか?私はテキストとして作ってみたが、それはフォーマットの悪夢だった。 – AKor

答えて

0

うーん... $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

EDIT:

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); 

データベース構造を提供することができれば、我々はあなたが完璧なスクリプトを得るのを助けることができます!

P.S.これが実際に動作するかどうかは分かりません(テストできず、長い間、明解なmysql構文を使用していませんでした)。 そうでない場合、問題は$yourData = $sqlCmd[0]...にあります。[0]を削除するだけです。

+1

mysql_fetch_arrayは1つの行を配列に格納しますが、すべての行とその列を含む多次元配列には格納されません。 [0]を省略してください。 –

+0

ありがとうございました。私は自分のデータベースクラスを作って、明白なmysql構文について少し忘れてしまいました。 – jolt

+0

mysql_queryのようなプリミティブな* PHP関数*に間違いがありますか? –

5

表の列を増分するためにSELECTおよびUPDATE問合せは必要ありません。

ちょうど1つのUPDATEクエリ[例]送る:あなたは正しいです掲載内容のどれも書いてきたすべてのコードを捨てる

UPDATE impressions SET views = views + 1 WHERE ad_id = 3 

を。間違いなく、設計したデータベーステーブルを使用しないでください。

私は本や2提案する可能性がある場合:から

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

+1

+1シンプルな解決策と修正があります。 – jolt

+0

私は今、テーブルをどのように構造化したのかという問題があると思います。私はスキーマごとにテーブルを作成していますが、1次元のようです。私は "views"、 "ad_id"などのようなものを置くことはどこにもありません。 – AKor

+1

新しいスキーマを作成します。もっと適切なものがあります: CREATE TABLEインプレッション(ad_id INT PRIMARY KEY、ビューINT DEFAULT 0); - 広告ごとに1つの行が表示され、その広告の行には、広告が表示された回数が表示されます。 –

-1

事な種類のオフトピックが、それでもPHP/MySQLを学んで、あなたに関連しますクエリを実行するときに知っていることは、'"。$ var。"' の代わりに '$ var'を追加する方が良いことです

私が言っていることをよりよく理解するには、上のコードで説明します。だから、代わりに:私はこれを読んでどこ

mysql_query("SELECT * FROM impressions ('".$writeVar."');"); 

私は覚えていないが、それはクエリの速度を最適化に関連したものだった:

mysql_query("SELECT * FROM impressions ('$writeVar');"); 

あなたはこれを持っています。

+0

クエリースピードとはまったく関係がありません。クエリーは一般的で常識的です。それはちょうど問題のスタイルであり、誰もが好きなものを自由に選ぶことができます。私にとっては、最初の方がより滑らかです。 –

+0

私が言ったように - 私はこれまでにこれを読んだことが分かっています。私はそれがルールだと言っていない、私はちょうど私が記事でこれを見て覚えていると言った... –

+0

だから、この記事は間違っていた。そして、あなたはそれのビットを理解していない場合は今、あなたはPHP/MySQLの学習で誰かに助言することはできますか? –

関連する問題