それで user が hatena の name にある値をすべて取得し
SELECT * FROM `hoge` WHERE `name` = 'hatena1' AND `name` = 'google' AND `name` = 'yahoo'; というSQLを生成したいのですがどうすればいいのでしょうか?ちなみに name がいくつあるかは不明です。 1つかもしれないですし、100かも知れません。
それに対応するPHPソースお願いします。
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'
こういう事ではない??
ひとつめの回答を補足します。
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'
と、とらえてご回答させていただきました。
サブクエリーが使えない場合であれば、
name='hatena1'のクエリーを実行して、そのuserにたいしてname='google'のクエリーを実行。おなじようにname='yahoo'というように
SQLではなくPHPのループを使って実行すればいいと思います。
こんな感じでどうですか?
//$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);
hoge_1とかhoge_2はいったいどこから?