質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

241閲覧

SQLite PHPでのテーブル作成

退会済みユーザー

退会済みユーザー

総合スコア0

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/30 15:34

編集2019/07/06 16:35

前提・実現したいこと

テーブル1からテーブル2のようにしたい。

テーブル1

idusernamepoint
1a12
2b30
3c23

テーブル2

idusernamepointRANK
2b301
3c232
1a123
INSERT INTO table_name2 SELECT id, username, point, RANK() OVER(ORDER BY point DESC) FROM table_name1

この場合はどうすればよいのか。上記のようなコードが使えるのか?

補足情報(FW/ツールのバージョンなど)

php 7.1.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

問題の切り分けと、色々な表現で調整してみる必要があるように思います。

  1. PDO::execは「作用した行数を返す」ので、DELETEで作用した件数、INSERTの件数を返り値で確認してみるとか
  2. SELECT id, username, point, RANK() OVER(ORDER BY point DESC) FROM table_name1はそもそも実行できるか(DB直に、PHPから両方)
  3. 「DB Brower for SQLiteをつかって」実行したときとPHPから実行するとき、データの状態は同じだったか
  4. exec()ではなくprepare()execute()の流れに変更してみる
  5. トランザクション→コミットorロールバックを入れてみる

投稿2019/07/01 05:59

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP の SQLite のバージョンは最新(3.25以上)ですか?
バージョンは以下のコードで確認できます。
https://stackoverflow.com/questions/34440517/how-to-check-which-version-of-sqlite-pdo-use

php

1$dbh = new PDO('sqlite::memory:'); 2print_r("SQLite version " . $dbh->query('select sqlite_version()')->fetch()[0]); 3$dbh = null;

SQLite で RANK() などの window function が使えるようになったのは、3.25からです
それ以前のバージョンですと、同様のエラーが発生します。

以下、SQLite 3.24 でご質問のSQLを試した場合のエラーです。

bash

1$ sqlite3 a.db 2SQLite version 3.24.0 2018-06-04 14:10:15 3Enter ".help" for usage hints. 4sqlite> INSERT INTO table_name2 SELECT id, username, point, RANK() OVER(ORDER BY point DESC) FROM table_name1; 5Error: near "(": syntax error

投稿2019/06/30 16:06

編集2019/06/30 16:11
nunukim

総合スコア135

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/30 16:12

PHP version 7.3.5 SQLite version 3.7.6.3 となっています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問