MySQL
- SQLiteについて
SQLiteのサンプルに、以下のような記述がありましたが extends(派生クラス) ということは元の基本クラスの記述があるということなのでしょうか? https://www.php.net/manual/ja/sqlite3.open.php /** * SQLite3 クラスを継承して __construct を変更し、 * open メソッドで DB を初期化します */ class MyDB extends SQLite3 {
- sql文で現在の時間と比較し期間が来たら削除したい
すみません、分かる方がいたら教えてほしいです。 現在PHPファイル内に記述されているsql文に修正を加えたいのですが、方法が分かりません。 実装したい内容は、表題の通りで、 現在は以下のコードで動いています。 $sql = "delete from hogehoge where limit_time<=now()"; おそらくデータベースhogehogeで、 今日の日付になれば、limit_timeに該当するテーブルは削除します。 という内容だと思っています。 これを、今日の日付がlimit_timeから2週間後になった時に削除する。 といったように、 削除する時期を変更したい場合は、どのように記述すればよろしいでしょうか? 拙い質問かもしれませんが、ご教授いただければと思います。
- 注文データのデータの整合性について
1つ、教えてください。 例えば、「商品マスタ」というテーブルに下記のデータがあるとします。 商品コード:1001 商品名:DVD-R 金額:980 「注文」というテーブルに上記の商品(商品コード:1001)の注文データが存在している時、 「商品マスタ」から「商品コード:1001」の商品を削除されないようにする事をなっていうのでしょうか。 「データの整合性」??? 「参照整合性」でいいんでしたっけ??? くだらない質問をしてすみませんがご教授いただけませんでしょうか。 宜しくお願いします。
- 締切済み
- MySQL
- wakaba1972
- 回答数1
- phpmyadminの初期値
すみません。 phpmyadminでデフォルト値を設定したくて下記の画像のようにカラム側をtext型にし、デフォルトをユーザー定義で値を挿入しました。 ブラザ側でpdo接続、fechをしたのですがimageのみ出力できませんでした。 設定、出力の方法を教えてほしいです。階層は、image/user/defualticon.pngです 一応、コード $row=$stmt->fetch(PDO::FETCH_NUM); var_dump($row); image以外は出力できました。
- AUTO_INCREMENTの扱いについて
MySQL 5.6を使用しています。 ユーザーテーブルがあるとします。 ユーザーテーブルにある「ユーザーID」はinsert時にAUTO_INCREMENTで自動採番されます。 ユーザーテーブルの別のカラムで「作成ユーザID」というカラムがあります。insertしたユーザーのユーザーIDを保持するカラムです。 すでにユーザーテーブルにいるユーザー(管理者)がinsertした場合はいいのですが、 自信で自分のユーザーを登録できる機能もあります。 その場合、まだ作成されてないユーザID(AUTO_INCREMENTで自動採番されるユーザーID)をどうやって参照したらいいでしょうか?
- dbの文字コード
データベース(mysql)(pdo)にpasswaerd_hashでハッシュ化した文字列を格納しようとしたのですがおそらく文字コードが違うためにはじかれてしまいます。 マニュアルに 結果をデータベースに格納するときにはカラム幅を 60 文字以上にできるようなカラムを使うことをお勧めします (255 文字くらいが適切でしょう)。 と書かれているのですが、どれを使えばいいかわかりません。 どの文字コード(カラム側)を使えばいいですか? 接続はutf8mb4です。 ちなみにメールアドレス、英数字の20文字程度はutf8_general_ciです。 英数字に最適な文字コードを教えてください
- データベース構造について
一ページに一つコメント機能をつけたいのですが、調べていると、 1.データベースは中身のデータを全て読み込んでから、データを抽出するので、レコードが多くなればなるほど読み込みが遅くなるのではないのでしょうか? 2.例えば、mysqlでページが100万ページでその一つ一つにコメント機能(コメントの最大1000件ほど)をつける場合、テーブルは別々(ぺーじ毎に)に作った方がよいのでしょうか?それとも、テーブル一つに全て書き込ませた方がよいのでしょうか?
- Apache,PHP,MySQLの役割
Apache, PHP, MySQLの役割をそれぞれ教えてください。どのようなイメージでWebページやアプリ,システムが作られているのかがよく分かりません。
- SQL文のエラー
SQL文でエラーが表示されます。どの部分を修正すればいいですか? SQL文が長いので文字列を結合する演算子「.」を使って複数行に分けています。 エラー内容:SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= ? and product_id = product.id' at line 2 //商品番号だけでなく、商品名や価格も表示したいので商品情報を保持するproductテーブルと 結合する。 //全て取得するのでSELECTは* //favoriteテーブルにはcustomer_idとproduct_id //productテーブルにはid, name, price $sql = 'SELECT * FROM favorite, product' . 'WHERE customer_id = ? and product_id = product.id '; // ?に顧客番号を指定する。 // favoriteテーブルの商品番号(product_id列)と、productテーブルの商品番号(id列)が // 一致している行だけが必要なので、WHERE句に条件を追加する。
- sql文について
sql文のswichをif分で変更したい。 下記のswitch文のlimitの範囲をユーザーが<a href="sqlpage1.php?sex=男&p=2">2ページ目</a>,<a href="sqlpage1.php?sex=男&p=3">3ページ目</a>,<a href="sqlpage1.php?sex=男&p=4">4ページ目</a>・・・・・・などを選択しクリックした場合にlimitの範囲を変更したいのですが(例 1ページ目・0~10、2ページ目・11~20、3ページ目・21~30、4ページ目・31~40・・・・・・) if文はどう書けばいいですか? ページはcssが一緒なので変えなくていいかなと思い一緒にしました。 以下、デフォルト(sqlpage1.php?sex=男&p=1)のものです。 switch($_REQUEST['sex']) { case 男; $sql = 'SELECT * FROM human where sex="男" order by limit (0,10)';ここを変更したい。 break; case 女; $sql = 'SELECT * FROM human where sex="女" order by limit 0,10'; break; case 中性; $sql = 'SELECT * FROM human where sex= "中性" order by limit 0,10'; break; }
- MYSQL vercharについて
create table salemanagement.syohin( syohin_no int(20), syohin_name verchar(100), kubun verchar(100), cost int(20), price int(20), suryo int(20), purchase_no int(20), purchase_name verchar(100), PRIMARY KEY(syohin_no,purchase_no)); テーブルを作成しようとすると上記の文で、以下のエラーが出ます。 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'verchar(100), kubun verchar(100), cost int(20), price int(20), suryo int(20), pu' at line 3 vercharの部分をcharにするとテーブル作成ができます。 原因は何なんでしょうか?
- 締切済み
- MySQL
- Suiqus_1214
- 回答数1
- win10homeのパソコンをdbサーバーにして
win10homeのPCにmysqlをインストールしてDBサーバーとして、クライアントのwin10pro/homeのPCからaccessのODBC接続は可能でしょうか?
- 締切済み
- MySQL
- taiheihome
- 回答数4
- 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にチェックで複数ステートメントの発行が可能でした。・・知らないことが多すぎる! もし他に別の方法があればと思い再々投稿しました。
- MySQLを起動する時はどうするのですか?
いつも大変お世話になり誠にありがとうございます。 標記の件。 今、画像の様にMySQLをC¥直下に解凍しました。 起動する時はどうするのですか? サーバーを立てないとダメなのでしょうか? ご多忙中恐れ入ります。 ご回答の程、宜しくお願い申し上げます。
- MySQLのインストール方法を教えてください。
いつも大変お世話になり誠にありがとうございます。 標記の件。 画像の所から前に進めません。 どうしたら良いでしょうか? ご多忙中恐れ入ります。 宜しくお願い申し上げます。
- MySQLに接続できない
Xampp Controll Panel を使ってMySQLに接続しようとしていますが、Apache サーバーには接続できてもMySQLへは出来ません。 スタートボタンを押すとしばらくは接続されているみたいなのですが、すぐに切れてしまいます。メッセージは添付の写真のとおりです。 昨日まではちゃんとできていたのに、今日出来ないのは、おそらくVisual Studio Code をインストールしたのが原因ではないかと思い、これをアンインストールしてPC(Windows10)を再起動してみましたが、ダメでした。 どなたか解決方法をご存知でしたら教えてください。よろしくお願いします。
- ベストアンサー
- MySQL
- papashiroSooke
- 回答数2
- INSERT INTOステートメント構文エラーにつ
初めましてご教授よろしくお願いします。 ■環境 office365(ExcelとAccess) INSERT INTOステートメント構文エラーについての質問です。 著:今村ゆうこさんの『Excel&Access連携 実践ガイド』を読みながら現在作業を しています。 やりたいことはExcelのデータをaccessに書き込むことです。 エラー内容は「INSERT INTO ステートメントの構文エラーです。」と表示されます。 しかし、何度も見直して見ましたが、どこがエラーの原因かわかりません。 VBAは基本的部分が分かる程度で、現在勉強中です。 正直手詰まりといった感じで何を修正すれば良いかわからないというのが現状でこちらに質問させていただきました。 皆様の知恵を貸してください。どうかよろしくお願い致します。 ▼Excelデータ Product Name / Merchant SKU / ASIN / Condition / qty ○○(商品名) / テキスト / テキスト / テキスト / 個数 strSQL = _ "INSERT INTO テーブル(" & _ "Product Name, " & _ "Merchant SKU, " & _ "ASIN, " & _ "Condition, " & _ "qty) " & _ "VALUES(" & _ "'" & Cells(n, 1) & "', " & _ "'" & Cells(n, 2) & "', " & _ "'" & Cells(n, 3) & "', " & _ "'" & Cells(n, 4) & "', " & _ Cells(n, 5) & ");" ▼書籍に記載のあった例(添付CDのデータを丸々コピペしています) strSQL = _ "INSERT INTO 販売管理(" & _ "商品コード, " & _ "商品名, " & _ "売上日, " & _ "数量, " & _ "売価, " & _ "製造場所, " & _ "定価, " & _ "原価, " & _ "取引先, " & _ "営業所, " & _ "社員名) " & _ "VALUES(" & _ "'" & Cells(n, 1) & "', " & _ "'" & Cells(n, 2) & "', " & _ "#" & CDate(Cells(n, 3)) & "#, " & _ Cells(n, 4) & ", " & _ Cells(n, 5) & ", " & _ "'" & Cells(n, 6) & "', " & _ Cells(n, 7) & ", " & _ Cells(n, 8) & ", " & _ "'" & Cells(n, 9) & "', " & _ "'" & Cells(n, 10) & "', " & _ "'" & Cells(n, 11) & "');" ▼全体の文 Option Explicit '変数の宣言を強制する '---ACCESS接続用 Private adoCn As Object 'ADOコネクションオブジェクト Private adoRs As Object 'ADOレコードセットオブジェクト Private strSQL As String 'SQL文 Sub DBconnect(flg As Boolean) 'DB接続プロシージャ Dim DBpath As String DBpath = ThisWorkbook.Path Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成 If flg = True Then Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成 adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=" & DBpath & "\SampleData.accdb;" 'Accessファイルを開く End Sub Sub DBcut_off(flg As Boolean) 'DB切断プロシージャ If flg = True Then adoRs.Close 'レコードセットのクローズ adoCn.Close 'コネクションのクローズ Set adoRs = Nothing 'オブジェクトの破棄 Set adoCn = Nothing End Sub Sub DBinsert_all() 'DB一括書込 Dim start_i As Long, end_i As Long, n As Long If MsgBox("一括書込を実行しようとしています。続けますか?", vbOKCancel) <> 1 Then 'メッセージ Exit Sub 'OK以外なら終了 End If If MsgBox( _ "Accessの「販売管理」テーブルのデータを一度削除し、" & vbCrLf & _ "現在このシートにある情報のみが書き込まれます。" & vbCrLf & _ vbCrLf & _ "実行してよろしいですか?", vbOKCancel + vbExclamation, "一括書込み") <> 1 Then 'メッセージ Exit Sub 'OK以外なら終了 End If start_i = 2 'スタート行 end_i = Range("A1").End(xlDown).Row '最終行を取得 Call DBconnect(False) 'DB接続 On Error GoTo Err_Handler 'エラーが起きたら"Err_Handler"へ adoCn.BeginTrans 'トランザクション開始 strSQL = "DELETE FROM 販売管理;" 'テーブル内データを全削除 adoCn.Execute strSQL '削除実行 For n = start_i To end_i 'データのある行を繰り返す strSQL = _ adoCn.Execute strSQL '書込実行 Next n adoCn.CommitTrans 'トランザクション終了(確定処理) Call DBcut_off(False) 'DB切断 MsgBox "正常に完了しました" Exit Sub
- ベストアンサー
- MySQL
- sakusakuraaa
- 回答数1