現在sqlから読み込んだ要素をentries配列に格納しようと考えているのですが、
次のように書いてしまうと長く、複雑になってしまいます。
$res_result = mysql_query( "SELECT * from {$entry_title}", $link );
while( $entry_title = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT * from {$entry_url}", $link );
while( $entry_url = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT * from {$unix_time}", $link );
while( $unix_time = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT * from {$entry_count}", $link );
while( $entry_count = mysql_fetch_assoc( $res_result ) ){};
$entries[$i++] = array(
"entry_title" => $entry_title,
"entry_url" => $entry_url,
"unix_time" => $unix_time,
"entry_count" => $entry_count,
);
もっと簡潔に書く方法はないでしょうか。
どなたかご教示のほど、どうかよろしくお願いします。
No.3ベストアンサー
- 回答日時:
>あるmysqlデータベースのテーブルにカラムが4つ、それぞれentry_id、entry_title、unix_time、entry_countがあるとします。
これらはid、タイトル、時間、カウント数を表すものとします。テーブルは一つなのですね。
であればまず
>$res_result = mysql_query( "SELECT dbName from entry_id", $link );
while( $entry_id = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from entry_title", $link );
while( $entry_title = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from unix_time", $link );
while( $unix_time = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from entry_count", $link );
while( $entry_count = mysql_fetch_assoc( $res_result ) ){};
このSQLが完全に間違っています。
現状はデータを一件も取得出来ていないんじゃ無いでしょうか。
こんなSQLを発行する必要があります。
//table_nameのところは実際のテーブル名を書く
select `entry_id`,`entry_title`,`unix_time`,`entry_count` from `table_name`
*phpMyAdminなんかをうまく利用して、先にSQLが正しいかどうかを確認するとスムーズに進みますよ。
これを発行すると
$sql = 'select `entry_id`,`entry_title`,`unix_time`,`entry_count` from `table_name`';
$res_result = mysql_query( "SELECT dbName from entry_id", $link );
$res_queryに全件の結果セットが格納されます。
あとは$res_queryを一件ずつ連想配列に格納すればいいので
(現状、mysql_fetch_assocの挙動も理解されてないと思います
結果セットに格納されたレコードを実行毎に一件だけ連想配列に格納します)
//ループの最初に$rowにレコードを連想配列に格納する
//連想配列が取得出来なくなったら(全件変換しおわったら)ループを終了する
while($row = mysql_fetch_assoc($res_result)){
//$rowはループ毎に上書きされるので、別の配列に格納する
$entries[] = $row;
}
//結果を確認してみる
var_dump($entries);
という感じになります。
ご回答ありがとうございます。
なるほど、まったく取得できなかったのはdbnameとカラム名が逆だったからですか。。。
ご丁寧な説明、ありがとうございます。理解できました。
この度は本当にありがとうございました。
No.2
- 回答日時:
なんかSQL文自体がおかしいですが、こういうことでしょうか?
$res_result = mysql_query( "SELECT entry_id,entry_title,unix_time,entry_count from tableName", $link );
while( $row= mysql_fetch_array( $res_result, MYSQL_ASSOC )){
$entries[]=$row;
};
print_r($entries);
この回答への補足
>SELECT entry_id,entry_title,unix_time,entry_count from tableName
こういう風に一括でまとめる手法は知りませんでした。
まさにほしかった情報です。大変参考になりました。
どうもありがとうございました。
No.1
- 回答日時:
このソースだと
・4つのテーブルから全レコードの全フィールドデータを抜き取り、最後のデータだけ
$entry_title,
$entry_url,
$unix_time,
$entry_count,
にそれぞれ格納する
$entries[$i++] は$i初出なので、単純に1になって、
$entries[1]に上記データを追加する
としか取れないのですが・・・
何がしたいのかがわからないので
具体的にどんなアプリケーションを想定していて、
どんなテーブル構造なのか
最終的に作りたい配列の構造はどうしたいのかの具体例
(print_rで出力されるような形で)
あたりの提示があると、回答出来ると思います。
すみません。書いている途中のコードと間違えました。
せっかく見てくださったのに申し訳ありません。
あるmysqlデータベースのテーブルにカラムが4つ、それぞれentry_id、entry_title、unix_time、entry_countがあるとします。これらはid、タイトル、時間、カウント数を表すものとします。
これらのデータを、行ごとに多次元配列entriesへと格納したいです。
そこで以下のようなコードを書きました。
以下、mysqlへは接続されているものとします。
$linkは$link = mysql_connect(dbServer, dbUser, dbPass);です。
----------
$res_result = mysql_query( "SELECT dbName from entry_id", $link );
while( $entry_id = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from entry_title", $link );
while( $entry_title = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from unix_time", $link );
while( $unix_time = mysql_fetch_assoc( $res_result ) ){};
$res_result = mysql_query( "SELECT dbName from entry_count", $link );
while( $entry_count = mysql_fetch_assoc( $res_result ) ){};
$entries = array(
"entry_title" => $entry_title,
"entry_url" => $entry_url,
"unix_time" => $unix_time,
"entry_count" => $entry_count,
);
----------
これで格納できると思ったのですが、
$res_result = mysql_query( "SELECT dbName from entry_id", $link );
:
:
while( $entry_count = mysql_fetch_assoc( $res_result ) ){};
の部分が長すぎるので、配列entry=array("entry_id","entry_title","unix_time","entry_count")とforeach文で上と同じコードを書きたいと思いました。
そうすればこの先データベースのカラムが増えたとしても、entryを増やすだけで対応できます
しかし、浅学なもので変数名などに配列の要素を使いまわす書き方となるとわかりません。
そのため、上の---から---までのコードと同じ機能を果たすコードを教えていただければと思い、質問させていただきました。
どうかよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- PHP php エラー 2 2022/10/23 16:43
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- Perl RSSにdiv,ul classを付けたいのですがどのようにつけるのかわからないです 2 2022/03/28 01:53
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのエラーについてです
-
sqlから多次元配列に要素を格納...
-
テーブルに入っているデータと...
-
CSVをダウンロードさせた際、CS...
-
会員登録したらメールが送られ...
-
Resource id #3 をフィールドの...
-
変数内のデータをmysqlのデータ...
-
postした値のデータ型
-
mysql_query等でレコード数を変...
-
PHP と Mysql の連携時に発生す...
-
PHPからMySQL・異なるDBにコピー
-
PHP+mysqlでSQL文に文字数制限...
-
変数同士の引き算が出来ない
-
VBAをつかってクエリの情報を抽...
-
MySQLでデータベースにデータin...
-
insert1つの処理でもトランザ...
-
ResultSetインターフェイスでの...
-
BLOBでの画像表示について
-
<VB.NET>INSERT文でDBにデータ...
-
PHPで[]の使い方について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sqlから多次元配列に要素を格納...
-
PHP+mysqlでSQL文に文字数制限...
-
phpのエラーについてです
-
PHPで絞り込み検索結果の件数を...
-
PDOを使いたい
-
CSVをダウンロードさせた際、CS...
-
stringaddslashes 半角¥が消える
-
MySQLのデータを使ってプルダウ...
-
mariadbでのエラー
-
php+mysql sql文実行について
-
XAMMPが起動しません。
-
SQL文2つ実行
-
会員登録したらメールが送られ...
-
「mysqlclient」の事が分からな...
-
if文で、レコードが無い場合だ...
-
mysql_real_escape_string
-
XAMPPで画面が真っ白になります。
-
配列に値が入らない
-
SQLの結果が返ってこない
-
ボタンのonclick時における関数...
おすすめ情報