• ベストアンサー

foreachの処理方法について

●やりたい事 【変更前】は抽出した顧客を一度に全て処理していた。 【変更後】は抽出した顧客を100件ごとに処理したい。 抽出後の処理をforeachでやっているので 100件処理して次の101件目からなど、どう対処してよいか わかりません。よい対処方法があれな教えてください。 ※「対象条件のデータを全件抽出する」部分は変更したくないです。 その後の処理で対応できればと考えています。 DB接続処理は省略してます。 【変更前】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); foreach($data as $value){ //該当顧客を対象に処理する } 【変更後】 //対象条件のデータを全件抽出する $sql = "select * from テーブル名"; $result=mysql_query($sql); if(!$result){ mysql_close($conn); exit; } while ($row = mysql_fetch_array($result)) { $data[] = $row; } mysql_free_result($result); //ループ数の計算 $loop = ceil( count($data) / 100 ); //************************************* //ここで$dataを分割できないでしょうか? //************************************* for($i=0;i<$loop;$i++){ foreach($data as $value){ //該当100件ごと顧客を対象に処理する } }

  • PHP
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 7tv3mm
  • ベストアンサー率75% (12/16)
回答No.3

こんな感じだと、どうでしょう ? // 100件ごとに格納 $ary_num = 0; $cnt = 0; $limit = 100; while ($row = mysql_fetch_array($result)) { $data[$ary_num][$cnt] = $row; $cnt++; if ($cnt == $limit) { $cnt = 0; $ary_num++; } } // 処理 foreach($data as $value){ foreach($value as $val2){ // 処理内容 } }

その他の回答 (2)

  • 7tv3mm
  • ベストアンサー率75% (12/16)
回答No.2

$data を2次元配列にするとかは ?

pos_pos
質問者

お礼

大変参考になりました。 このように編集して2次元配列を作成すれば いいのですね! ありがとうございました。

pos_pos
質問者

補足

7tv3mmさん、$data を2次元配列にする方法を教えてください。 お願いします。

  • takubou05
  • ベストアンサー率52% (11/21)
回答No.1

$i = 0; foreach(){ $i++ if($i % 100 = 0){ 顧客対象処理(); } } 顧客対象処理(); こんな感じじゃだめですか?

pos_pos
質問者

補足

takubou05さん、ありがとうございます。 こういう方法もあるんですね! 大変、参考になりました。 ありがとうございました。

関連するQ&A

  • 正規表現かsplit、foreachのどれかでエラーになる

    MySQLのデータを並び替える文を作っています if(preg_match("_","$_GET[o]")){ $row = split("_","$_GET[o]"); }else{ $row = "$_GET[o]"; } foreach($row as $val){ ...... } このように書いたり、1行目のpreg_matchをeregに変えたりするとpreg_matchのところなのかsplitなのかそのあたりでエラーが出ます。 $row = split("_","$_GET[o]"); foreach($row as $val){ ...... } このように変えるとsplitが実行されたときにエラーになります(_がないときはスルーで問題なし) なので、おそらく$rowの型なのなんなのか分かりませんが、それが良くないと思うのですが、これはどうすればエラーが出なくなるのでしょうか。 エラーそのものの内容は少し先の ところが対象と思われる mysql_fetch_array(): supplied argument is not a valid MySQL result resource となるのですが、これはforeachのなかでMySQLのOrder by文節をまとめているので、それが影響してのことだと思います。 つまりは、foreachにかける$rowの問題だと思うのですが・・・ どなたかお分かりの方ヒントをください。 perl(MySQLは触らず)からphp&MySQLへの乗り換え中でphpは初心者です

    • 締切済み
    • PHP
  • mySQLで結果が無いときの処理

    $sql = "select * from test "; $sql .= "where id='".$_POST["id"]."' and pwd='".$_POST["pwd"]."'"; $result = mysql_query($sql); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { if($row){ $msg = "OK"; } } としていますが、NGのときってどういう風にしたらいいのでしょうか? 基本的なことですみませんが、教えてください。

    • ベストアンサー
    • PHP
  • smartyでMySQLから連想配列取り出しと表示

    フォーム(POST)を使ってMySQLにデータを挿入し、 mysql_fetch_assocにて連想配列で取り出して、 whileで表示する場合、 ======================================== $sql = "SELECT * hogehoge"; $result = mysql_query($sql); while ($row = mysql_fetch_assoc($result)) { echo $row["userid"]; echo $row["name"]; echo $row["sex"]; } ======================================== とすれば、MySQLから値を取りだして表示できます。 ただ、それをsmartyに置き換えて以下のようにすると、 ======================================== {foreach from=$row item=hoge} <tr> <td>{$row.userid}</td> <td>{$row.name}</td> <td>{$row.sex}</td> </tr> {/foreach} ======================================== 同じ値が$rowの値の数だけ返されてしまいます。 例だと、 1 太郎 男 2 花子 女 3 一郎 男 4 陽子 女 5 良子 女 と表示したいものが、 1 太郎 男 1 太郎 男 1 太郎 男 となってしまいます。 これを解決するには、どのようにすればよろしいのでしょうか?

    • ベストアンサー
    • PHP
  • PHPのforeachでSQL文を処理しても良い?

    PHPのforeachでSQL文を処理しても良いか教えてください。 ・foreachループの中でSQLを書いているのですが、なるべくしない方がよいのでしょうか? (一般的な書き方ではない?) ・MySQLで代替する書き方はあるでしょうか? ・もし代替する書き方がなくてforeach文を使う場合、SQL文が長くてもクエリ数が少ない書き方の方がよいのでしょうか?

    • ベストアンサー
    • MySQL
  • mysql_fetch_objectにデータを取得させたいのですが、うまく行きません。

    データ型 name varchar(30), item1 char(8), item2 int(6) で、テーブルが下記のようなっています。 | name |item1 | item2 | | taro | abcd | 53 | | taro | efghk | 48 | | taro | lmnp | 02 | while文で array_push($ydata, $row->item1) として $row = mysql_fetch_object($result) にデータを取得させたいのですが(スクリプト下記)、 $conn_id = mysql_connect("localhost","***","***") or die('Error connecting to MySQL'); mysql_select_db('***',$conn_id); $query ="SELECT item1,item2 from XYZ where name='taro'"; $result = mysql_query($query,$conn_id) or die($query.'failed('.mysql_error().')'); $ydata = array(); while($row = mysql_fetch_object($result)){   ←10行目 // array_push($ydata, $row->item1);      //  ここに下記の13、14行目を追記 } var_dump($row);echo"<br />\n"; var_dump($result); print_r($row); echo"<br />\n"; これでブラウザから見ると bool(false) resource(3) of type (mysql result) としか出ません。(19行目の結果は表示されません。) そのため 13: echo "item1",$row['item1'],"<br>"; 14 echo "item2",$row['item2'],"<br>"; と追記してブラウザから見ると、単に [ item1 ]とだけ表示されます。 10 行目を while($row = mysql_fetch_arrayt($result)){ に変えてブラウザから見ると item1abcd item253 imem1efghk item250 item1lmnp item258 bool(false) resource(3) of type (mysql result)   となります。 $row = mysql_fetch_object($result) にデータを取得させるにはどのように修正すれば良いのでしょうか?

    • ベストアンサー
    • PHP
  • phpMyadminとPHP上からの違い?

    おせわになります よろしくお願いします SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%' というSQL文があり、 phpMyadmin上からSQLを実行すると 4と表示されるのですが PHPから $sql = "SELECT COUNT(*) FROM テーブル名 WHERE dee = 0 AND Fee LIKE '%文字%'"; $result = mysql_query($sql,$conn); $row = mysql_fetch_row($result); とすると0、$row[0]は0となります 特にエラーの表示もなく データベースへの接続も問題ないようなのですが 原因がわかるかたいらっしゃいましたら 教えて下さい 以上よろしくお願いします

    • ベストアンサー
    • PHP
  • 外部サーバでの処理について

    PHP + MySQL でデータベース検索結果を表示するシステムを作っています。 利用者側サーバには呼び出しスクリプトを置いて、 こちら側サーバには処理スクリプトを置くことにより 処理ノウハウの提供を防ぎたいのですがうまくいきません。 利用者側サーバでのスクリプト単体では問題なく動いているのですが、 こちら側のサーバで一部の処理を動かそうとすると (つまり利用者側から require 'http://hogehoge.jp/list.php'; しようとすると) 下記のようにエラーとなってしまうのです。 (ちなみにこちら側サーバ単体でも正常に動作します。) Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /パス/list.php on line 9 Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /パス/list.php on line 10 どちらのサーバも同じレンタルサーバ会社から借りており、PHP も MySQL も利用可能です。 他の部分ではエラーは出ないのですが、mysql_query() や mysql_fetch_row() などは 外部サーバでは使えないのでしょうか? //全登録件数を表示する処理 $sql_countall = "select number from ".$db_table; $result = mysql_query($sql_countall, $dbHandle ); while($temp = mysql_fetch_row($result)){ $datacount = $datacount +1; }

    • ベストアンサー
    • PHP
  • 配列で指定した値のみをMySQLからループで呼び出す方法

    MySQLから呼び出す際の下記のような書式を簡略化したいと思っています。 $test = $row['test']; アドバイスのほどよろしくお願いいたします。 /* 以下ソース */ $field =array('a','b','c','d','e','f'); function ROW_DATA(){ grobal $field; foreach($field as $key => $val){ return $key = $row['$key']; } } $sql = "SELECT * FROM data"; $rs = mysql_query($sql); while($row = mysql_fetch_array($rs)) { ROW_DATA(); }

    • ベストアンサー
    • PHP
  • ループでチェックボックスにcheckedを入れたい

    昨日質問させて頂きました件は、上手く行きました。ありがとうございました。また、行き詰ってしまったのでよろしくお願いいたします。 $intersectという配列があります。中身はarray(20,22)です。 データベースのテーブルから、fetch_arrayですべてを取り出し、 この値と同じである場合、チェックボックスにチェックを入れたいと考えています。 しかし、最後の値しかチェックボックスにチェックが入りません。どうかよろしくお願いいたします。 ********************************************************** $sql = "SELECT * FROM option_name"; $res = mysql_query($sql, $conn) or die("データ抽出エラー"); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {  $subject = $row["subject"];//題名  $option_no = $row["opno"];//プランNO foreach ($intersect as $value){  if($value == $option_no){   $checked = "checked";   }else{   $checked = " "; } } $op_subject .= "<input type='checkbox' name='subject[]' value='$option_no' $checked>$option_no$subject<br>"; } print $op_subject;

    • ベストアンサー
    • PHP
  • PHP+MySQLでの検索結果の横並び表示について

    PHP+MySQLでデータベース作成をはじめた初心者です。 検索結果を横並びにしたかったので他ページを参考にやってみました。 横に並べられるようにはなったのですが、検索結果を横並びで、かつ、4こならべると次の行にうつる方法はどうすればいいのでしょうか? データひとつを■とすると ■■■<改行> ■■■<改行> ■■■<改行> といった感じです。 よろしくお願いいたします。 <?php $host = "localhost"; if (!$conn = mysql_connect($host, "ユーザー", "パス")){ die("MySQL接続エラー.<br />"); } mysql_select_db("データベース名", $conn); $sql = "SELECT * FROM 01_table WHERE on ='1'"; $res = mysql_query($sql,$conn); print("<tr>"); while($row = mysql_fetch_array($res)) { print("<td>".$row["■"]); print("</td>"); } mysql_free_result($res); ?> print("</tr>");

    • ベストアンサー
    • PHP

専門家に質問してみよう