(PHP & MySQL) hoge というテーブルに name と user というカラムがあります。


それで user が hatena の name にある値をすべて取得し

SELECT * FROM `hoge` WHERE `name` = 'hatena1' AND `name` = 'google' AND `name` = 'yahoo'; というSQLを生成したいのですがどうすればいいのでしょうか?ちなみに name がいくつあるかは不明です。 1つかもしれないですし、100かも知れません。

それに対応するPHPソースお願いします。

回答の条件
  • 1人2回まで
  • 登録:2006/06/15 02:01:22
  • 終了:2006/06/21 00:59:38

回答(5件)

id:kuippa No.1

くいっぱ回答回数1030ベストアンサー獲得回数132006/06/15 02:51:21

ポイント15pt

nameの結合条件はANDでいいんですか?

SQLいっぽんでできますよ、


SELECT

hoge_1.*

FROM hoge hoge_1,

hoge hoge_2

WHERE

hoge_2.name = hoge_1.name

and hoge_2.user = 'hatena'



こういう事ではない??

id:esecua

hoge_1とかhoge_2はいったいどこから?

2006/06/15 03:27:47
id:kuippa No.2

くいっぱ回答回数1030ベストアンサー獲得回数132006/06/15 10:46:52

ポイント14pt

ひとつめの回答を補足します。

hoge_1 や hoge_2はテーブルの別名というやつです。

hogeテーブルとhogeテーブルを結合させているので、

このままだと名前がダブってしまいます。

そこで通常SQLではテーブルに任意の別名をつけることができるようになっています。

そこで、ひとつめのhogeテーブルをhoge_1。

ふたつめのhogeテーブルをhoge_2と名前をつけたわけです。

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_09.htm


SQL文の意味も補足したほうがよさそうなので補足しておきます。


SELECT

name

FROM hoge

WHERE

user = 'hatena'


という検索結果(※1)を元に

SELECT

*

FROM hoge

から(※1)のnameに同等のものを検索してねという意味になります。





質問文を読むと、

SELECT * FROM `hoge`

WHERE `name` = 'hatena1' AND `name` = 'google' AND `name` = 'yahoo'


これはANDでつなげたら一件も検索結果が返ってこないような気がしています、もしかしたらご質問の内容を取り違えているかもしれませんが、

SELECT * FROM `hoge`

WHERE `name` in ('hatena1','google','yahoo')

もしくは

SELECT * FROM `hoge`

WHERE `name` = 'hatena1' or `name` = 'google' or `name` = 'yahoo'

と、とらえてご回答させていただきました。

id:moonwolf No.3

MoonWolf回答回数30ベストアンサー獲得回数22006/06/15 09:20:00

ポイント27pt

サブクエリーが使えない場合であれば、

name='hatena1'のクエリーを実行して、そのuserにたいしてname='google'のクエリーを実行。おなじようにname='yahoo'というように

SQLではなくPHPのループを使って実行すればいいと思います。

id:kakicg No.4

kakicg回答回数44ベストアンサー獲得回数32006/06/15 08:04:46

ポイント33pt

こんな感じでどうですか?

//$hostname:ホスト名, $username:ユーザー名, $password:パスワード

$hoge = mysql_pconnect($hostname, $username, $password);

mysql_select_db($hoge_db, $hoge ); //$hoge_db: データベース名

$name_list = mysql_query("SELECT * FROM `hoge` WHERE `user`=`hatena`", $hoge) or die(mysql_error());

$total_rows = mysql_num_rows($name_list);

for( $i=0; $i<$total_rows; $i++) {

$item = mysql_fetch_assoc($name_list);

echo $item['name']."
";

}

mysql_free_result($name_list);

id:kakicg No.5

kakicg回答回数44ベストアンサー獲得回数32006/06/15 17:01:36

ポイント11pt

先ほどのソースの最後の行の表示が変になってしまいました。

下に置き換えます。

echo $item['name']."<br />";//←(全て半角で)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません