(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/21 00:59:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答5件)

id:kuippa No.1

回答回数1030ベストアンサー獲得回数13

ポイント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ベストアンサー獲得回数13

ポイント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

回答回数30ベストアンサー獲得回数2

ポイント27pt

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

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

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

id:kakicg No.4

回答回数44ベストアンサー獲得回数3

ポイント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

回答回数44ベストアンサー獲得回数3

ポイント11pt

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

下に置き換えます。

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

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

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

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

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

回答リクエストを送信したユーザーはいません