今だけ人気マンガ100円レンタル特集♪

こんばんは。
題名の通り、select文のwhere句に配列を入れて検索したいのですが、
同じ質問↓も見つけ、やってはみるのですがうまくいかないので、教えてください。
http://oshiete1.goo.ne.jp/qa2940474.html

現在、
$member_id という配列にデータを入れ(この配列には正しく値が入っています。)
$sql = "SELECT * FROM テーブル名 WHERE id IN (".$member_id.");

としているのですが、うまくいきません。
どこがおかしいのでしょうか。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

どのプログラミング言語を使っているのかわかりませんが、(書かないところを見るとPHP?)



配列に文字列が入っているとして、それをカンマ区切りでつなげた文字列を作って、それを IN の後のカッコの中に入れないといけません。

PHPだとすると、
$sql = "SELECT * FROM テーブル名 WHERE id IN (".implode(",",$member_id).");";

この回答への補足

はい、PHPでした。
教えていただいた通りでできました!!ありがとうございます!

ばっちし解決したので、20P差し上げたいのですが、親切な方な気がして、もう少しお聞きしてもよろしいでしょうか。
ほぼ独学でやっているのですが、最近はいつも、どこまで自分で悩むか、考えてしまいます。悩むと先ほどのような解決方法を探すのに、2時間くらいかかります。
それは、探せる範囲でこれならできるんじゃないか、と試しまくるからですが、教えてgooなどで質問すると、親切な方に巡り合えると、一瞬で解決します。
探す時間の折り合いをどこで付けようかと考えます。。

notnotさんは、プログラムを勉強する際、まだ、あまり詳しくなかった頃、わからないことにぶちあたったら、どうしていましたか?
そしてどのような感じで、上達していったんですか?

補足日時:2009/01/10 02:05
    • good
    • 0

>プログラムを勉強する際、まだ、あまり詳しくなかった頃、わからないことにぶちあたったら、どうしていましたか?



まじめにプログラミングの勉強をしたいのであれば、まず、言語の詳しい解説書とかリファレンスを通読します。わからないときに調べるんじゃなくて、最初から最後まで全部読む。暗記しようと思う必要はありません。入門書で簡単に書いてある部分がきちんと説明されてたりして、理解が深まります。2回くらい読むと、どのあたりにどんなことが書いてあるとかは覚えられますので、わからないときにどこを読めばいいかがわかる。

PHPだと、http://www.php.net/manual/ja/ とかがいいでしょうね。ただ、PHPは関数が山ほどあるので、自分に全然関係ないジャンルの関数の解説は飛ばしても良いでしょう。それ以外の所は全部読む。
理解できないところがあれば、小さいプログラムを書いて実験する。
理解できないことが残ってもかまいません。どのあたりがまだ理解できてないかは覚えておいた方が良いでしょうね。

最初にきちんと理解しておけば、わからないことが出てきても途方に暮れることはないと思います。

SQLの場合はリファレンス通読はつらいか・・・・
でも、中途半端な入門書をみたり、個人のブログを検索するより、リファレンスにあたる習慣を付けるのがいいと思います。
    • good
    • 1
この回答へのお礼

なるほど(^^)とても勉強になります。
そうですね、、今までは、読みなれていないというのもあってリファレンス等は、あまり読んでませんでしたね。。
PHPマニュアルをもっと身近なものにできるよう頑張りたいと思います!
本当にご親切に、ありがとうございました!

お礼日時:2009/01/10 13:54

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qselect文のwhere句に配列を入れて検索したいのです。

はじめまして。php5とpostgresを使って、ブラウザで都道府県をセレクトで複数選択(prefecture[])して、postgresに
select city from city_table where p_id='prefecture';
としているのですが、結果を出力できません。

print_rで見たところprefectureに複数選択した都道府県のidが配列として入っていることは確認しております。

where句に配列を入れて検索するにはどうすれば良いのでしょうか?
よろしくお願いいたします。

Aベストアンサー

WHERE句の書き方が違うと思います。
複数の条件であれば = ではなく、IN を使います。
  WHERE p_id IN (条件1, 条件2, …)

Qデータベースに配列を格納する

私はデータベースを本で勉強していたのですが物にするため、実際にデータベースのプログラムをくんでみようと設計を考えたのですが、疑問があります。
私はデータベースに、プログラム上で取り扱っているサイズがことなる複数の配列内のデータを格納したいのですが、これはデータベースにどのように格納すればよいのか分からず困っています。
図で説明すると
例えば
{1}
{12 33 24 21}
{13 56 0 1}
という3つの配列を同じデータベースに入れようとした場合
ID int1 int2 int3 int4
1 1 null null null
2 12 33 24 21
3 13 56 0 1
という形で入れる事になると思いますが、ここにサイズが5の配列をいれようとした場合は列が増えることになってしまいます。すると色々めんどくさいことになるのではないかと思います。

このようなデータベースに入れるデータのサイズが分からない場合は、どのようにするべきなのでしょうか?(なおJDBCを使い、SQLiteに入れています)
やや抽象的かつ、意味がわかりにくい質問ですが不足な点は説明させていただきますので、ご回答よろしくお願いします。

私はデータベースを本で勉強していたのですが物にするため、実際にデータベースのプログラムをくんでみようと設計を考えたのですが、疑問があります。
私はデータベースに、プログラム上で取り扱っているサイズがことなる複数の配列内のデータを格納したいのですが、これはデータベースにどのように格納すればよいのか分からず困っています。
図で説明すると
例えば
{1}
{12 33 24 21}
{13 56 0 1}
という3つの配列を同じデータベースに入れようとした場合
ID int1 int2 int3 int4
1 1 null null nul...続きを読む

Aベストアンサー

データベースは、規則性をもったデータを格納し、またあとでデータを取り出して利用することが目的です。

なので、ご質問の配列に、どういう規則性があるのか または、 それを後で、どのように利用することを考えているのか
がないと、意味がないように感じます。
単に、サイズが異なる配列を収めるということなら、
id data
1 1
2 12 33 24 21
3 13 56 0 1
としても良いように思えます。dataの部分は、区切り文字をスペースなりカンマにするなりして、後でデータを取り出して
プログラム側で分割もありではないでしょうか?

データベースを学んでいるとあるのですが、正規化という考えからすると、ID int1 int2 int3 int4 という考えはないと思います。

Q配列に指定した値が含まれているものを抽出する方法

こんにちは。
いつもお世話になっております。

SQLにて、配列のフィールドに指定した値が含まれているものを抽出する方法を質問致します。


SQLのテーブル(テーブル名:data)に配列のフィールド(フィールド名:array[])があるとします。
Array[]フィールドの中に、1, 2, 6のいずれかが含まれている場合表示対象となるSQL文を書くには、どのように書けばよいですか。PostgreでSQL文を書くとします。


実現したい動作は以下の通りです。
array[] の値
{1,3,5} 表示対象になる
{3,8,9,10}  表示対象にならない
{2,6} 表示対象になる

以上よろしくお願い致します。


ちなみに、array[]フィールドの中に、2(指定した数値が1つだけ)を探すとき、
select * from data where 2=any (array);
とすればいいことは確認できました。

Aベストアンサー

&& 演算子 (重複する, 共通要素を持つ) を使います。

SELECT * FROM (VALUES
(ARRAY[1,3,5]),
(ARRAY[3,8,9,10]),
(ARRAY[2,6])
) T(arr)
WHERE ARRAY[1,2,6] && arr;

参考URL:http://www.postgresql.jp/document/current/html/functions-array.html

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1

Q【Transact-sql】 where条件、inのパタメータを変数に持たせる方法

inの中の値を変数に持たせ、実行したいのですが方法がわかりません。
以下に、問題となっているsqlを記載しました。
aテーブルのIDはsmallint型で、varchar型等への型変更不可とします。

cast(ID as varchar(100)) in (@ID) 等も試してみたのですが、
'1,2,3'をin内の1データとみなしてしまっているようで、正しい結果を
返してくれませんでした。

declare @ID varchar(100)
set @ID = '1,2,3'
SELECT * FROM a WHEREID in (@ID)

Aベストアンサー

条件式の値部分(「列名=変数」や「列名 between 変数1 and 変数2」でなく、式全体を変えたいようなケース(inでの値の個数変更を含む)では、動的SQLを使う必要があります。
SQL Serverで動的SQLを使い、select文で複数行を得る場合の方法についてはあまり詳しくないので、ヒントという形でアドバイスします。

こんな感じで、文字列でカーソル定義(この時、SELECT文の条件式を変える)し、カーソルで操作する形になると思います。

execute('DECLARE tb CURSOR FOR SELECT * FROM tablename' + @yymm)

Qforeachで回った数を表示したい

単純な質問ですみません。
====
//getTestlistは別ファイルで定義済み。
<?
$testlist=getTestlist();
foreach($testlist as $test){
?>


<? } ?>
====
例えば↑こんなふうにforeachで$testlistが存在するだけ回したとします。
そのときに何回まわったか?($testが何件あったか?)だけを表示したいのですが、そんなことってできますか?
表示したい位置は<? } ?>の外側にと考えています。
あさってな質問でしたらすみません。
phpVer 4.3

よろしくお願いいたします。

Aベストアンサー

<?
$testlist=getTestlist();
$n=0;
foreach($testlist as $test){
$n++;
?>
<?}?>

<?=$n?>回
とかでよいかと思います。

途中でbreakなどが無ければ
<? echo count($testlist) ?>でも良いかも知れません。

Q宜しくお願いします。

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから--->

$min = h($r -> x);
$max = h($s -> y);
for($i=$min ; $i<= $max; $i++){
$search = sprintf("SELECT id FROM Sheet WHERE no='%d'",$i);
$q_search = mysql_query($search);
$result = mysql_fetch_object($q_search);
echo $result;
}

宜しくお願いします。
mix~max値の間、発行したクエリーからの値を配列に入れたいのですが、どうもFor文中にmin,max値は届いているのですが,$resultに値が入りません。
エラーからしてSQLで行っている変数処理に$iの値が届いてない感じがするのですが、下記のソースを見て頂いて、疑わしき点などご指摘、ご教授いただけませんでしょうか。

どうぞ宜しくお願いします。


--エラー文ここから--->
Catchable fatal error: Object of class stdClass could not be converted to string in ...




--ソースここから...続きを読む

Aベストアンサー

PHPあまり詳しくないので間違っていたらすいません。


>$result = mysql_fetch_object($q_search);
でresultはobject型で代入しておりそれを表示するときにString型に変換できていないのが原因かとおもわれます。

参考URL
mysql-query
http://php.net/manual/ja/function.mysql-query.php

mysql-fetch-array
http://php.net/manual/ja/function.mysql-fetch-array.php

mysql_fetch_object
http://phpspot.net/php/man/php/function.mysql-fetch-object.html

QJavaScriptde途中で、「exit」するには?

function kensaku(){
s_data = document.kaiin_form.input_name.value;

if(!s_data){ alert("キーワードを入れて下さい!"); }

if(s_data != dumy){ ...... }
for(i=st_no;i<=n;i++){
......省略.................;
.......省略................}
}

----------------------------------
3行目で表示されたアラートをOKで閉じても、4行目以下が実行されてしまいます。
3行目でexitするにはどうすれば良いでしょうか?

Aベストアンサー

>関数(kensaku())からは抜けられませんでした。
そうですね、勘違いしていました、f(^^;
すみません。
if(!s_data){
alert("キーワードを入れて下さい!");
return;
}
ですね。


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング