人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

(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ソースお願いします。

●質問者: esecua
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Google Hatena hoge MySQL name
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● くいっぱ
●15ポイント

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はいったいどこから?


2 ● くいっぱ
●14ポイント

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

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'

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


3 ● MoonWolf
●27ポイント

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

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

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


4 ● kakicg
●33ポイント

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

//$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);


5 ● kakicg
●11ポイント

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

下に置き換えます。

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ