mpro-gram の回答履歴

全369件中1~20件表示
  • MySQL8.0で中央値を求める方法

    Windows10 64bit環境でMySQL8.0を使い中央値を求めるため模索している素人です。 5.6ではユーザー定義変数を使った下記の方法で求めていました。 SELECT avg(t1.`金額`) as `金額` FROM ( SELECT @rownum:=@rownum+1 as `row_number`, d.`金額` FROM uriage d, (SELECT @rownum:=0) r ORDER BY d.`金額` ) as t1, ( SELECT count(*) as total_rows FROM uriage d ) as t2 WHERE 1 AND t1.`row_number` in ( floor((total_rows+1)/2), floor((total_rows+2)/2)); しかし、これを8.0で実行すると結果は求められるのですが、次のような注意が出ます 「式内でのユーザー変数の設定は非推奨であり、将来のリリースで削除される予定です」 その上ODBCで通らなくなりました。そこで何か他にないかと検索したところ下記のサイトにPreparedStatementを使っている別の方法がありました、 *ttps://qiita.com/nkojima/items/2c483d4ddbdb29439c87 この場合。注意はでませんがODBC(デフォルト設定)では通らなかったのでさらに検索したところ *ttps://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql&usg=ALkJrhjuCCaICL0uLguGt2oD4qbVM9cG7g にウインドウ関数を使った単一ステートメントの下記の方法が紹介されていました、 SELECT AVG(t1.`金額`) AS median_val FROM (SELECT `金額`, ROW_NUMBER() OVER(ORDER BY `金額`) AS row_num FROM uriage) t1, (SELECT COUNT(*) AS num_records FROM uriage) t2 WHERE t1.row_num IN (FLOOR((t2.num_records + 1) / 2), FLOOR((t2.num_records + 2) / 2)) MySQLで100万件のレコードを対象に試したところ上記の変数を使った2件の方法より同等か少し遅い結果となりました。それでも標準SQLでの方法よりはるかに速いのですが・・・ また、以前使っていた32bit5.6に比べて上記2件の方法が遅いことがわかりました(平均3.0と1.9secが3.188と2.806secに)。・・・ とあるサイトで8.0ではCOUNT(*)が遅い原因の一つと考えられているとあったのででCOUNT(カラム名)に変更 (1)1.670 (2)1.640 (3)1.919 となりウインドウ関数を使った単一ステートメントの方法が一番遅い結果となりました。・・えっと!思いそこで前々回に質問しました(削除済み)・・平均値は前回のバッテリーモードから変更して測定し直しました。 さら検索していたら単一ステートメントの方法は見つかりませんでしたが、あるサイトにwith句をを使った方法が載っていました(試したところクエリが成立せず?)。1部を改変し下記クエリを試してみました。 SELECT COUNT(*)+1 INTO @rowindex FROM uriage; WITH i AS (SELECT `金額`,ROW_NUMBER() OVER (ORDER BY `金額`) AS rowindex FROM uriage) SELECT AVG(`金額`) AS median_duration FROM i WHERE i.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2)); この方法では、COUNT(カラム名)よりCOUNT(*)の方が速い結果となりました。 (4)COUNT(カラム名)・・1.906   (5)COUNT(*)・・1.547・・・・これでまた混乱を増加 他のDBからのODBC経由でSQLを実行するスクリプトを組んでいるので(3)の単一ステートメント方法以外にも、(2)や(5)の方法を参考に最初にCOUNTするクエリで値を取得し変数使い次に計算式でクエリを整形し直してから発行する2度手間のスクリプトを組んで中央値を取得していましたが、投稿の後調べてみるとODBCのシステムDSNの設定でconnectionのAllow multiple statementsにチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。

    • turu575
    • 回答数5
  • MySQL8.0で中央値を求める方法

    Windows10 64bit環境でMySQL8.0を使い中央値を求めるため模索している素人です。 5.6ではユーザー定義変数を使った下記の方法で求めていました。 SELECT avg(t1.`金額`) as `金額` FROM ( SELECT @rownum:=@rownum+1 as `row_number`, d.`金額` FROM uriage d, (SELECT @rownum:=0) r ORDER BY d.`金額` ) as t1, ( SELECT count(*) as total_rows FROM uriage d ) as t2 WHERE 1 AND t1.`row_number` in ( floor((total_rows+1)/2), floor((total_rows+2)/2)); しかし、これを8.0で実行すると結果は求められるのですが、次のような注意が出ます 「式内でのユーザー変数の設定は非推奨であり、将来のリリースで削除される予定です」 その上ODBCで通らなくなりました。そこで何か他にないかと検索したところ下記のサイトにPreparedStatementを使っている別の方法がありました、 *ttps://qiita.com/nkojima/items/2c483d4ddbdb29439c87 この場合。注意はでませんがODBC(デフォルト設定)では通らなかったのでさらに検索したところ *ttps://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql&usg=ALkJrhjuCCaICL0uLguGt2oD4qbVM9cG7g にウインドウ関数を使った単一ステートメントの下記の方法が紹介されていました、 SELECT AVG(t1.`金額`) AS median_val FROM (SELECT `金額`, ROW_NUMBER() OVER(ORDER BY `金額`) AS row_num FROM uriage) t1, (SELECT COUNT(*) AS num_records FROM uriage) t2 WHERE t1.row_num IN (FLOOR((t2.num_records + 1) / 2), FLOOR((t2.num_records + 2) / 2)) MySQLで100万件のレコードを対象に試したところ上記の変数を使った2件の方法より同等か少し遅い結果となりました。それでも標準SQLでの方法よりはるかに速いのですが・・・ また、以前使っていた32bit5.6に比べて上記2件の方法が遅いことがわかりました(平均3.0と1.9secが3.188と2.806secに)。・・・ とあるサイトで8.0ではCOUNT(*)が遅い原因の一つと考えられているとあったのででCOUNT(カラム名)に変更 (1)1.670 (2)1.640 (3)1.919 となりウインドウ関数を使った単一ステートメントの方法が一番遅い結果となりました。・・えっと!思いそこで前々回に質問しました(削除済み)・・平均値は前回のバッテリーモードから変更して測定し直しました。 さら検索していたら単一ステートメントの方法は見つかりませんでしたが、あるサイトにwith句をを使った方法が載っていました(試したところクエリが成立せず?)。1部を改変し下記クエリを試してみました。 SELECT COUNT(*)+1 INTO @rowindex FROM uriage; WITH i AS (SELECT `金額`,ROW_NUMBER() OVER (ORDER BY `金額`) AS rowindex FROM uriage) SELECT AVG(`金額`) AS median_duration FROM i WHERE i.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2)); この方法では、COUNT(カラム名)よりCOUNT(*)の方が速い結果となりました。 (4)COUNT(カラム名)・・1.906   (5)COUNT(*)・・1.547・・・・これでまた混乱を増加 他のDBからのODBC経由でSQLを実行するスクリプトを組んでいるので(3)の単一ステートメント方法以外にも、(2)や(5)の方法を参考に最初にCOUNTするクエリで値を取得し変数使い次に計算式でクエリを整形し直してから発行する2度手間のスクリプトを組んで中央値を取得していましたが、投稿の後調べてみるとODBCのシステムDSNの設定でconnectionのAllow multiple statementsにチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。

    • turu575
    • 回答数5
  • MySQL8.0で中央値を求める方法

    Windows10 64bit環境でMySQL8.0を使い中央値を求めるため模索している素人です。 5.6ではユーザー定義変数を使った下記の方法で求めていました。 SELECT avg(t1.`金額`) as `金額` FROM ( SELECT @rownum:=@rownum+1 as `row_number`, d.`金額` FROM uriage d, (SELECT @rownum:=0) r ORDER BY d.`金額` ) as t1, ( SELECT count(*) as total_rows FROM uriage d ) as t2 WHERE 1 AND t1.`row_number` in ( floor((total_rows+1)/2), floor((total_rows+2)/2)); しかし、これを8.0で実行すると結果は求められるのですが、次のような注意が出ます 「式内でのユーザー変数の設定は非推奨であり、将来のリリースで削除される予定です」 その上ODBCで通らなくなりました。そこで何か他にないかと検索したところ下記のサイトにPreparedStatementを使っている別の方法がありました、 *ttps://qiita.com/nkojima/items/2c483d4ddbdb29439c87 この場合。注意はでませんがODBC(デフォルト設定)では通らなかったのでさらに検索したところ *ttps://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql&usg=ALkJrhjuCCaICL0uLguGt2oD4qbVM9cG7g にウインドウ関数を使った単一ステートメントの下記の方法が紹介されていました、 SELECT AVG(t1.`金額`) AS median_val FROM (SELECT `金額`, ROW_NUMBER() OVER(ORDER BY `金額`) AS row_num FROM uriage) t1, (SELECT COUNT(*) AS num_records FROM uriage) t2 WHERE t1.row_num IN (FLOOR((t2.num_records + 1) / 2), FLOOR((t2.num_records + 2) / 2)) MySQLで100万件のレコードを対象に試したところ上記の変数を使った2件の方法より同等か少し遅い結果となりました。それでも標準SQLでの方法よりはるかに速いのですが・・・ また、以前使っていた32bit5.6に比べて上記2件の方法が遅いことがわかりました(平均3.0と1.9secが3.188と2.806secに)。・・・ とあるサイトで8.0ではCOUNT(*)が遅い原因の一つと考えられているとあったのででCOUNT(カラム名)に変更 (1)1.670 (2)1.640 (3)1.919 となりウインドウ関数を使った単一ステートメントの方法が一番遅い結果となりました。・・えっと!思いそこで前々回に質問しました(削除済み)・・平均値は前回のバッテリーモードから変更して測定し直しました。 さら検索していたら単一ステートメントの方法は見つかりませんでしたが、あるサイトにwith句をを使った方法が載っていました(試したところクエリが成立せず?)。1部を改変し下記クエリを試してみました。 SELECT COUNT(*)+1 INTO @rowindex FROM uriage; WITH i AS (SELECT `金額`,ROW_NUMBER() OVER (ORDER BY `金額`) AS rowindex FROM uriage) SELECT AVG(`金額`) AS median_duration FROM i WHERE i.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2)); この方法では、COUNT(カラム名)よりCOUNT(*)の方が速い結果となりました。 (4)COUNT(カラム名)・・1.906   (5)COUNT(*)・・1.547・・・・これでまた混乱を増加 他のDBからのODBC経由でSQLを実行するスクリプトを組んでいるので(3)の単一ステートメント方法以外にも、(2)や(5)の方法を参考に最初にCOUNTするクエリで値を取得し変数使い次に計算式でクエリを整形し直してから発行する2度手間のスクリプトを組んで中央値を取得していましたが、投稿の後調べてみるとODBCのシステムDSNの設定でconnectionのAllow multiple statementsにチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。

    • turu575
    • 回答数5
  • MySQL8.0で中央値を求める方法

    Windows10 64bit環境でMySQL8.0を使い中央値を求めるため模索している素人です。 5.6ではユーザー定義変数を使った下記の方法で求めていました。 SELECT avg(t1.`金額`) as `金額` FROM ( SELECT @rownum:=@rownum+1 as `row_number`, d.`金額` FROM uriage d, (SELECT @rownum:=0) r ORDER BY d.`金額` ) as t1, ( SELECT count(*) as total_rows FROM uriage d ) as t2 WHERE 1 AND t1.`row_number` in ( floor((total_rows+1)/2), floor((total_rows+2)/2)); しかし、これを8.0で実行すると結果は求められるのですが、次のような注意が出ます 「式内でのユーザー変数の設定は非推奨であり、将来のリリースで削除される予定です」 その上ODBCで通らなくなりました。そこで何か他にないかと検索したところ下記のサイトにPreparedStatementを使っている別の方法がありました、 *ttps://qiita.com/nkojima/items/2c483d4ddbdb29439c87 この場合。注意はでませんがODBC(デフォルト設定)では通らなかったのでさらに検索したところ *ttps://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql&usg=ALkJrhjuCCaICL0uLguGt2oD4qbVM9cG7g にウインドウ関数を使った単一ステートメントの下記の方法が紹介されていました、 SELECT AVG(t1.`金額`) AS median_val FROM (SELECT `金額`, ROW_NUMBER() OVER(ORDER BY `金額`) AS row_num FROM uriage) t1, (SELECT COUNT(*) AS num_records FROM uriage) t2 WHERE t1.row_num IN (FLOOR((t2.num_records + 1) / 2), FLOOR((t2.num_records + 2) / 2)) MySQLで100万件のレコードを対象に試したところ上記の変数を使った2件の方法より同等か少し遅い結果となりました。それでも標準SQLでの方法よりはるかに速いのですが・・・ また、以前使っていた32bit5.6に比べて上記2件の方法が遅いことがわかりました(平均3.0と1.9secが3.188と2.806secに)。・・・ とあるサイトで8.0ではCOUNT(*)が遅い原因の一つと考えられているとあったのででCOUNT(カラム名)に変更 (1)1.670 (2)1.640 (3)1.919 となりウインドウ関数を使った単一ステートメントの方法が一番遅い結果となりました。・・えっと!思いそこで前々回に質問しました(削除済み)・・平均値は前回のバッテリーモードから変更して測定し直しました。 さら検索していたら単一ステートメントの方法は見つかりませんでしたが、あるサイトにwith句をを使った方法が載っていました(試したところクエリが成立せず?)。1部を改変し下記クエリを試してみました。 SELECT COUNT(*)+1 INTO @rowindex FROM uriage; WITH i AS (SELECT `金額`,ROW_NUMBER() OVER (ORDER BY `金額`) AS rowindex FROM uriage) SELECT AVG(`金額`) AS median_duration FROM i WHERE i.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2)); この方法では、COUNT(カラム名)よりCOUNT(*)の方が速い結果となりました。 (4)COUNT(カラム名)・・1.906   (5)COUNT(*)・・1.547・・・・これでまた混乱を増加 他のDBからのODBC経由でSQLを実行するスクリプトを組んでいるので(3)の単一ステートメント方法以外にも、(2)や(5)の方法を参考に最初にCOUNTするクエリで値を取得し変数使い次に計算式でクエリを整形し直してから発行する2度手間のスクリプトを組んで中央値を取得していましたが、投稿の後調べてみるとODBCのシステムDSNの設定でconnectionのAllow multiple statementsにチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。

    • turu575
    • 回答数5
  • MySQL8.0で中央値を求める方法

    Windows10 64bit環境でMySQL8.0を使い中央値を求めるため模索している素人です。 5.6ではユーザー定義変数を使った下記の方法で求めていました。 SELECT avg(t1.`金額`) as `金額` FROM ( SELECT @rownum:=@rownum+1 as `row_number`, d.`金額` FROM uriage d, (SELECT @rownum:=0) r ORDER BY d.`金額` ) as t1, ( SELECT count(*) as total_rows FROM uriage d ) as t2 WHERE 1 AND t1.`row_number` in ( floor((total_rows+1)/2), floor((total_rows+2)/2)); しかし、これを8.0で実行すると結果は求められるのですが、次のような注意が出ます 「式内でのユーザー変数の設定は非推奨であり、将来のリリースで削除される予定です」 その上ODBCで通らなくなりました。そこで何か他にないかと検索したところ下記のサイトにPreparedStatementを使っている別の方法がありました、 *ttps://qiita.com/nkojima/items/2c483d4ddbdb29439c87 この場合。注意はでませんがODBC(デフォルト設定)では通らなかったのでさらに検索したところ *ttps://stackoverflow.com/questions/1291152/simple-way-to-calculate-median-with-mysql&usg=ALkJrhjuCCaICL0uLguGt2oD4qbVM9cG7g にウインドウ関数を使った単一ステートメントの下記の方法が紹介されていました、 SELECT AVG(t1.`金額`) AS median_val FROM (SELECT `金額`, ROW_NUMBER() OVER(ORDER BY `金額`) AS row_num FROM uriage) t1, (SELECT COUNT(*) AS num_records FROM uriage) t2 WHERE t1.row_num IN (FLOOR((t2.num_records + 1) / 2), FLOOR((t2.num_records + 2) / 2)) MySQLで100万件のレコードを対象に試したところ上記の変数を使った2件の方法より同等か少し遅い結果となりました。それでも標準SQLでの方法よりはるかに速いのですが・・・ また、以前使っていた32bit5.6に比べて上記2件の方法が遅いことがわかりました(平均3.0と1.9secが3.188と2.806secに)。・・・ とあるサイトで8.0ではCOUNT(*)が遅い原因の一つと考えられているとあったのででCOUNT(カラム名)に変更 (1)1.670 (2)1.640 (3)1.919 となりウインドウ関数を使った単一ステートメントの方法が一番遅い結果となりました。・・えっと!思いそこで前々回に質問しました(削除済み)・・平均値は前回のバッテリーモードから変更して測定し直しました。 さら検索していたら単一ステートメントの方法は見つかりませんでしたが、あるサイトにwith句をを使った方法が載っていました(試したところクエリが成立せず?)。1部を改変し下記クエリを試してみました。 SELECT COUNT(*)+1 INTO @rowindex FROM uriage; WITH i AS (SELECT `金額`,ROW_NUMBER() OVER (ORDER BY `金額`) AS rowindex FROM uriage) SELECT AVG(`金額`) AS median_duration FROM i WHERE i.rowindex IN (FLOOR(@rowindex / 2) , CEIL(@rowindex / 2)); この方法では、COUNT(カラム名)よりCOUNT(*)の方が速い結果となりました。 (4)COUNT(カラム名)・・1.906   (5)COUNT(*)・・1.547・・・・これでまた混乱を増加 他のDBからのODBC経由でSQLを実行するスクリプトを組んでいるので(3)の単一ステートメント方法以外にも、(2)や(5)の方法を参考に最初にCOUNTするクエリで値を取得し変数使い次に計算式でクエリを整形し直してから発行する2度手間のスクリプトを組んで中央値を取得していましたが、投稿の後調べてみるとODBCのシステムDSNの設定でconnectionのAllow multiple statementsにチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。

    • turu575
    • 回答数5
  • SQL select 2つの日時データの結合

    SQLで2つの日時データについて、片方の日時に一番近い別データのレコードを結合して抜き出したいです。 <Table1> 日時A data1 2020/07/01 10:00:00 1000 2020/07/01 11:00:00 1000 <Table2> 日時B col1 2020/07/01 9:50:00 AAA 2020/07/01 10:05:00 BBB 2020/07/01 11:10:00 CCC 上記2つのようなデータがある場合、下記のようなSELECT結果を取得したいです。 日時A data1 日時B col1 2020/07/01 10:00:00 1000 2020/07/01 9:50:00 AAA 2020/07/01 11:00:00 1000 2020/07/01 10:05:00 BBB この場合、どのような構文を使用したらよいでしょうか? お手数ですが、よろしくお願いいたします。

    • km000
    • 回答数1
  • ご教示ください。

    ご教示ください。 javaで日付操作をやっています。 通常、クラスのインスタンスを作成する場合 クラス名 変数名 = new クラス名(); ですが、カレンダークラスを使用した際に Calender 変数名 = Calender.getInstance(); と出てきました。 Calenderクラスにある、getInstanceメソッドを呼び出していると思います。 クラスをインスタンスすることで、そのクラス内にある、メソッドやフィールドを初期値で使えて(コンストラクタがない場合)と認識しています。 インスタンスで、直接、メソッドを呼び出せる場合があるのでしょうか?

  • 複数のフォルダから部分一致するファイルを抜きだす

    お世話になります。 複数のフォルダの中に番号がつけられたjpegデータがいくつか入っています。 aフォルダ 124_1.jpeg 124_2.jpeg 124_3.jpeg 125_1.jpeg 125_2.jpeg 125_3.jpeg bフォルダ 126_1.jpeg 126_2.jpeg 126_3.jpeg 127_1.jpeg 127_2.jpeg 127_3.jpeg それらの中から、特定の複数の番号のファイルのみコピーして1つのフォルダ(copyという名前)に効率よくまとめるにはどうしたらよいでしょうか? 具体的には上のような複数のフォルダから 124を含むファイル3つと126を含むファイル3つをコピーして1つにまとめたいです。 よろしくお願いいたします。

  • SQLで取得した値をListの値の並び順にしたい

    Listに入っている値とSQLで取得した値を突き合わせてSQLで取得した値を Listに入っている値の並び順にしたいです。 ↓イメージ List[A01,A02,C03,A03] のようにコード値が入っています。 SELECT コード(A01,A02,...),名称(A01名,A02名,...) FROM table で取得した結果を A01名,A02名,C03名,A03名で並ばせたいです。 環境はJavaです。よろしくお願いします。

    • ベストアンサー
    • Java
  • 【MySQL】SITEN_CODE毎の高速ランキン

    MySQL5.7でランキングの集計をしたいのですが、遅すぎて困っています。 URIAGEテーブルのSITEN_CODE毎にKINGAKU_RANKとKENSU_RANKを集計したい。 SELECT URIAGE.SITEN_CODE, URIAGE.SHAIN_BANGO, (SELECT COUNT(URIAGE2.KINGAKU) FROM URIAGE AS URIAGE2 WHERE URIAGE2.KINGAKU > URIAGE.KINGAKU AND URIAGE2.SITEN_CODE = URIAGE.SITEN_CODE)+1 AS KINGAKU_RANK, URIAGE.KINGAKU, (SELECT COUNT(URIAGE2.KENSU) FROM URIAGE AS URIAGE2 WHERE URIAGE2.KENSU > URIAGE.KENSU AND URIAGE2.SITEN_CODE = URIAGE.SITEN_CODE)+1 AS KENSU_RANK, URIAGE.KENSU FROM URIAGE ・件数が少ない内は動いたので、データ登録(約13万件) ・データ登録後、次のSQLで12時間動かしても終了しない。 という状態で困っています。 高速にランキング集計する方法があればご教授くださいm(_ _)m

    • dotred
    • 回答数1
  • SQLite3のGROUP_CONCA

    初歩的な質問かもしれませんが、お願いします。 SQLite3のGROUP_CONCAT(DISTINCT後に文字並べ替えをしたいです。 現在はGROUP_CONCAT(DISTINCTで 特別コース,B1コース,A3コース,A1コース の様にランダムで表示されているのですが、 A1コース,A3コース,B1コース,特別コース の様に並べ替えがしたいです。 SQLite3ではMYSQLの様にORDER BY FIELDが使えず困っています。 いい方法がないかアドバイスいただけると助かります。m(_ _)m

    • dotred
    • 回答数1
  • フレームワークは、相対パスではうまくいかないのでし

    https://okwave.jp/qa/q9374798.html の続き >>> <!doctype html> <html> <head> <title>Sample</title> <style> body { color:gray; } h1 { font-size:18pt; font-weight:bold; } </style> </head> <body> <?php $message = 'dai'; $array = ['dai' => 'debu', 'dai2' => 'debu22']; echo($array['dai2']); ?> <h1>Sample</h1> <p><?php echo $message; ?></p> </body> <?php /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::get('/hello', function () { return '<html><body><h1>Hello World</h1><p>this is sample page.</p></body></html>'; }); Route::get('helo', function () { return view('helo',['message' => 'Hello!']); }); ありがとうございます。上記のようにしたところうまくいったようです。 /を外すと確かにうまくいったのですが、なぜフレームワークは、相対パスではうまくいかないのでしょうか? Route::get('/hello', function () { return '<html><body><h1>Hello World</h1><p>this is sample page.</p></body></html>'; }); には/があるのにうまくいくことも混乱する原因です。 パスが通っているのでファイル名だけで実行できるのでしょうか? どこをカレントディレクトリとして考えているのかも謎ですね。 また、5.5の説明サイトが見つからずに困っていたので、ありがとうございます。 意訳のようなので、若干日本語がおかしいですが、恐らく5.5の情報は、このようなサイトしかないのでしょうね。 http://ysktec.com/shiguregaki/blog/?p=1088 こちらは5.3移行という事で更新も2017年に行っているようなのでディレクトリ構成も5.5対応かと思ったのですが、こちらの情報も古くて使えないのですかね。

    • ベストアンサー
    • PHP
  • MySQLのタイムゾーンの設定

    ・OS(CentOS7)のタイムゾーン:United States である場合、my.cnfにて ・MySQLシステムのタイムゾーン(SYSTEM) ・セッションのタイムゾーン(SYSTEM) という設定を行いました。 show variables like '%time_zone%'; を実行すると以下のようになっておりこの状態で select now(); を行ったらUTCタイムが表示されました。 United Statesの時刻が表示されると思ったのですが なぜUTC時刻が表示されたのでしょうか。 +--------------------------+--------+ | Variable_name | Value | +-------------------------+--------+ | system_time_zone | SYSTEM | | time_zone | SYSTEM |

    • ベストアンサー
    • MySQL
    • unko347
    • 回答数1
  • MySQLで対象期間を決め集計しランキングする方法

    MySQLの初心者ですが、対象期間で集計を行いランキング付けし任意の上位何位までを抽出する方法について教えてください。 全データから集計後上位5位を選ぶ場合・・同順有り select x.`品名`,x.kei,(select count(*)+1 from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) y where x.kei<y.kei ) as rank from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) x having rank <= 5 order by rank といろいろ参考にしてで出来ましたが。任意の対象期間(日付)を設定して実行するSQL文が思いつきません。どこに期間を挿入するのか・・・悪あがきで思い付いた方法として CREATE OR REPLACE VIEW uriage_01 AS SELECT `品名`,SUM(`金額`) AS `金額` FROM uriage WHERE `日付` BETWEEN "2001/01/01" AND "2001/01/31" GROUP BY `品名` で任意期間の集計結果のビューを作りそのビューから select r1.`品名` as `品名`, r1.`金額` as p, count(r2.`金額`)+1 as rank from uriage_01 as r1 left join uriage_01 as r2 on r1.`金額` < r2.`金額` group by r1.`品名` having rank <= 5 order by rank と手間の掛かる方法です。単純に5行だけに限定ならorder by `金額`Limit 5 にすれば良いだけですけど・・・同順があるとどうすれば良いのかと思考停止状態です。尚、当方は、MySQLの勉強を始めたばかりにですので宜しくお願いいたします

    • ベストアンサー
    • MySQL
    • turu575
    • 回答数1
  • 素材を比較して共通項目数をデータベースに格納したい

    PHPで素材の特徴の共通項目数を求めるシステムを作っていますが結果がデータベースに格納されずに困っています。 データベース'compare'のテーブル'answers'に既にいくつかの回答(データ)が入っている状態で質問formから受け取った質問の回答をテーブル'answers'のデータと比較し幾つ共通項目があるかをデータベース'compare'の'result'テーブルにidナンバー(idフィールド)と共通項目数(commonsフィールド)を格納することを目指いしています。 【質問form】 <html> <head> <meta charset="UTF-8"> <title>特徴マッチ度</title> </head> <body> <form method="post" action="question_check.php"> 熱に強い<br/> <input type="radio" name="q1" value="1">Yes <input type="radio" name="q1" value="2">No<br/> 柔軟性がある<br/> <input type="radio" name="q2" value="1">Yes <input type="radio" name="q2" value="2">No<br/> 1、手で破く事ができる2、手で破く事はできない3鋏を使えば切れる4、鋏でも切れない<br/> <input type="radio" name="q3" value="1">1 <input type="radio" name="q3" value="2">2<input type="radio" name="q3" value="3">3 <input type="radio" name="q3" value="4">4<br/> <br/> <input type="button" onclick="history.back()" value="戻る"> <input type="submit" value="OK"> </form> </body> </html> 【回答チェックPHP(略)をし値を送る】 <form method="post" action="compare.php">'; print'<input type="hidden" name="q1" value="'.$question1.'">'; print'<input type="hidden" name="q2" value="'.$question2.'">'; print'<input type="hidden" name="q3" value="'.$question3.'">'; print'<br/>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; 【試したPHP】 <html> <head> <meta charaset="UTF8"> <title>素材比較</title> </head> <body> <?php $question1=$_POST['q1']; $question2=$_POST['q2']; $question3=$_POST['q3']; $dsn='mysql:dbname=compare;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql='SELECT code,r1,r2,r3 FROM answers WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh=null; //回答が共通する計を求める。 while(true) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } if($rec['r1']==$question1) { $s=$s+1; } else { $s=0; } if($rec['r2']==$question2) { $s=$s+1; } if($rec['r3']==$question3) { $s=$s+1; } //試した一例 $dsn='mysql:dbname=compare;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql = "INSERT INTO results (id, commons) VALUES (:id, :commons)"; $stmt = $dbh->prepare($sql); $id= array($rec['code']=>$s); // foreachで挿入する値を1つずつループ処理 foreach ($id as $key => $s) { // 連想配列のキーを :name に、値を :commons にセットし、executeでSQLを実行 $stmt->execute(array(':id' => $key, ':commons' => $s)); } $s=0; } //新規の素材の回答をテーブルanswersの最後に格納。 $dsn='mysql:dbname=kachikan;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql='INSERT INTO answers(r1,r2,r3) VALUES (?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$question1; $data[]=$question2; $data[]=$question3; $stmt->execute($data); $dch=null; ?> </body> </html> 【得たい結果】 テーブル'answers'にすでに3つの素材の特徴の回答が下記の様に入っていたとします。 code | r1 | r2 | r3 | 1 | 2 | 1 | 4 | 2 | 1 | 2 | 3 | 3 | 2 | 3 | 1 | 新規に1つの素材(code 4)の回答(2,2,4)をformから送った場合 ccode 4とcode 1の共通項目はr1とr3で共通項目数は2。 code 4とcode 2の共通項目はr2のみで共通項目数は1。 code 4とcode 3の共通項目はr1のみで共通項目数は1。 テーブル'results'には id | commons| 1 | 2 | 2 | 1 | 3 | 1 | という結果が格納されてほしいのですが(codeとidの内容は同じで同一の素材です)テーブル'results'に値が格納されません。 テーブル'answers'にはcode 4の回答を最後に格納して code | r1 | r2 | r3 | 1 | 2 | 1 | 4 | 2 | 1 | 2 | 3 | 3 | 2 | 3 | 1 | 4 | 2 | 2 | 4 | と言う結果になることを求めています。 どなたかお助けください。

    • ベストアンサー
    • MySQL
    • pintxos
    • 回答数2
  • 素材を比較して共通項目数をデータベースに格納したい

    PHPで素材の特徴の共通項目数を求めるシステムを作っていますが結果がデータベースに格納されずに困っています。 データベース'compare'のテーブル'answers'に既にいくつかの回答(データ)が入っている状態で質問formから受け取った質問の回答をテーブル'answers'のデータと比較し幾つ共通項目があるかをデータベース'compare'の'result'テーブルにidナンバー(idフィールド)と共通項目数(commonsフィールド)を格納することを目指いしています。 【質問form】 <html> <head> <meta charset="UTF-8"> <title>特徴マッチ度</title> </head> <body> <form method="post" action="question_check.php"> 熱に強い<br/> <input type="radio" name="q1" value="1">Yes <input type="radio" name="q1" value="2">No<br/> 柔軟性がある<br/> <input type="radio" name="q2" value="1">Yes <input type="radio" name="q2" value="2">No<br/> 1、手で破く事ができる2、手で破く事はできない3鋏を使えば切れる4、鋏でも切れない<br/> <input type="radio" name="q3" value="1">1 <input type="radio" name="q3" value="2">2<input type="radio" name="q3" value="3">3 <input type="radio" name="q3" value="4">4<br/> <br/> <input type="button" onclick="history.back()" value="戻る"> <input type="submit" value="OK"> </form> </body> </html> 【回答チェックPHP(略)をし値を送る】 <form method="post" action="compare.php">'; print'<input type="hidden" name="q1" value="'.$question1.'">'; print'<input type="hidden" name="q2" value="'.$question2.'">'; print'<input type="hidden" name="q3" value="'.$question3.'">'; print'<br/>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; 【試したPHP】 <html> <head> <meta charaset="UTF8"> <title>素材比較</title> </head> <body> <?php $question1=$_POST['q1']; $question2=$_POST['q2']; $question3=$_POST['q3']; $dsn='mysql:dbname=compare;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql='SELECT code,r1,r2,r3 FROM answers WHERE 1'; $stmt=$dbh->prepare($sql); $stmt->execute(); $dbh=null; //回答が共通する計を求める。 while(true) { $rec=$stmt->fetch(PDO::FETCH_ASSOC); if($rec==false) { break; } if($rec['r1']==$question1) { $s=$s+1; } else { $s=0; } if($rec['r2']==$question2) { $s=$s+1; } if($rec['r3']==$question3) { $s=$s+1; } //試した一例 $dsn='mysql:dbname=compare;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql = "INSERT INTO results (id, commons) VALUES (:id, :commons)"; $stmt = $dbh->prepare($sql); $id= array($rec['code']=>$s); // foreachで挿入する値を1つずつループ処理 foreach ($id as $key => $s) { // 連想配列のキーを :name に、値を :commons にセットし、executeでSQLを実行 $stmt->execute(array(':id' => $key, ':commons' => $s)); } $s=0; } //新規の素材の回答をテーブルanswersの最後に格納。 $dsn='mysql:dbname=kachikan;host=localhost'; $user='root'; $password=''; $dbh=new PDO($dsn, $user, $password); $dbh->query('SET NAMES utf8'); $sql='INSERT INTO answers(r1,r2,r3) VALUES (?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$question1; $data[]=$question2; $data[]=$question3; $stmt->execute($data); $dch=null; ?> </body> </html> 【得たい結果】 テーブル'answers'にすでに3つの素材の特徴の回答が下記の様に入っていたとします。 code | r1 | r2 | r3 | 1 | 2 | 1 | 4 | 2 | 1 | 2 | 3 | 3 | 2 | 3 | 1 | 新規に1つの素材(code 4)の回答(2,2,4)をformから送った場合 ccode 4とcode 1の共通項目はr1とr3で共通項目数は2。 code 4とcode 2の共通項目はr2のみで共通項目数は1。 code 4とcode 3の共通項目はr1のみで共通項目数は1。 テーブル'results'には id | commons| 1 | 2 | 2 | 1 | 3 | 1 | という結果が格納されてほしいのですが(codeとidの内容は同じで同一の素材です)テーブル'results'に値が格納されません。 テーブル'answers'にはcode 4の回答を最後に格納して code | r1 | r2 | r3 | 1 | 2 | 1 | 4 | 2 | 1 | 2 | 3 | 3 | 2 | 3 | 1 | 4 | 2 | 2 | 4 | と言う結果になることを求めています。 どなたかお助けください。

    • ベストアンサー
    • MySQL
    • pintxos
    • 回答数2
  • BitフィールドにLOAD DATAできない

    以下の定義のテーブル(Bitフィールドを持つ)にLOAD DATAでデータを 入れようとしているのですがエラーになり困っています。 マニュアルにあるようにSET句を使用してLOADをしようとしているのですが 「You have an error in your SQL syntax;~」と コマンドの4行目のところで出てしまいます。どこがおかしいのでしょうか。 【テーブルの定義】 mysql> desc data; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | key1 | int(11) | NO | PRI | NULL | | | key2 | int(11) | NO | PRI | NULL | | | date | datetime | NO | PRI | NULL | | | flg1 | bit(1) | NO | | b'1' | | +-------+----------+------+-----+---------+-------+ 【CSVファイルの内容】 1,2,"2016-12-17 10:00:00",1 1,2,"2016-12-17 11:00:00",0 【コマンド】 LOAD DATA INFILE 'C:/csv/data.csv' INTO TABLE test.data (key1, key2, date, @var1) SET flg1 = CAST(@var1 AS SIGNED) FIELDS TERMINATED BY ',' ENCLOSED BY '"';

    • unko347
    • 回答数1
  • PHPのNULL使い所

    PHPのNULL使い所ってありますか? $var = null; isset($var) → false でセットされている場合もnullだとissetはfalseを返すし、なんだか非常に使い所が無いように感じるのですが、nullをこんな感じで使ってるor全く使わない等々、皆様の状況を教えてください。

    • 締切済み
    • PHP
  • print("A"); とリテラルとデータ型

    リテラルとデータ型について質問します。 インプレス社の問題集で次の解説を見ました。(一部抜粋) 「Javaのリテラルは、デフォルトでは、整数値であればint型、..  文字であればchara型のデータとして扱われます。」 よく見掛けるコードに次のようなものがあると思います。 System.out.println("A"); この時の文字列A(今回は便宜的に1文字にしています。)は、 変数などで特にデータ型の指定をしていませんが、 JavaのデフォルトとしてString型として扱われる、と考えて良いのでしょうか? Javaのデフォルトのリテラルの扱い、特に「デフォルトの」というところが 明確にわからずにいます。「デフォルトの」というのは、私が上記で例示したような 「データ型指定しない場合」ということでいいのでしょうか…。 解説をお願いします。

    • noname#225019
    • 回答数1
  • 「複数のPHPファイルを上から順に15秒ごとに読み

    「複数のPHPファイルを上から順に15秒ごとに読み込む」ようなPHPファイルが欲しいです。 それをcronで定期的に実行したいのですが、どうしてもエラーが出てしまい上手く動きません。 <?php ini_set('display_errors', 1); error_reporting(-1); set_time_limit(0); $list = [ 'http://xxx.com/file1.php', 'http://xxx.com/file2.php', 'http://xxx.com/file3.php', 'http://xxx.com/file4.php', 'http://xxx.com/file5.php', 'http://xxx.com/file6.php', 'http://xxx.com/file7.php', 'http://xxx.com/file8.php', 'http://xxx.com/file9.php', 'http://xxx.com/file10.php', ]; foreach ($list as $url) { $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, ]); sleep(15); curl_exec($ch); } ?> いちおう初心者ながらに書いてみたのですが、どこが悪いのかを教えてください。

    • 締切済み
    • PHP
    • noname#231189
    • 回答数2