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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

解決済

2回答

3773閲覧

テーブル内部結合後のWHERE句による条件抽出について

noe

総合スコア16

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2017/04/05 03:16

編集2017/04/05 06:46

いつもお世話になっております。

##前提
ユーザー情報を管理するusersテーブルと、インスタグラムのアカウントについて管理するinstagramテーブルを保持しており、2つのテーブルは共通したinsta_nameというカラムを持っています。

配列形式でpostされたユーザー情報(中身にはユーザー名が入っています)をループし
、csvファイルに出力するためのユーザー情報をまとめた$user_listを作成したいと思っています。

##解決したい問題
共通したinsta_nameをもとにテーブルを内部結合し、その上でpostされた配列内のユーザー名をもとにレコードを抽出したいのですが、WHERE句の行で文法エラーが発生してしまいます。

そのため、以下コード内のエラー原因がどこかを教えていただけないでしょうか。

foreach ($csvUser as $user) { $user_list[] = $this->dbh->query("SELECT users.*, instagram.account_url, instagram.insta_follower, FROM users INNER JOIN instagram ON users.insta_name = instagram.insta_name WHERE users.insta_name = '$user'")->fetch(PDO::FETCH_ASSOC); }

##試したこと
WHERE句の検索内容としている$userの部分を

WHERE users.insta_name = $user //シングルクォーテーションを付けない WHERE users.insta_name = " . $user) //文字結合とする

など試みましたが、改善しませんでした。

よろしくお願いいたします。

##追記

実際のエラー内容を貼っていなかったことに対して、失礼しました。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'username' in 'where clause'' in /classes/CsvExport.php:55 Stack trace: #0 /classes/CsvExport.php(55): PDO->query('SELECT\n ...') #1 /select_user_control.php(13): CsvExport->export(Array) #2 {main} thrown in /classes/CsvExport.php on line 55

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

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

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

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

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

guest

回答2

0

ベストアンサー

見た感じwhere句の文法エラーではないように思えます
具体的なエラー内容を記載していただければより正確な回答ができるかと。

SELECTの羅列の最後が「,」で終わっていますが
まずはこれを取ってみてはいかがですか?

全体像として$csvUserをベースにprepare処理で検索をかけるべき案件では?

sample

プレースホルダーのsampleです

PHP

1$sql=<<<eof 2SELECT 3users.*, 4instagram.account_url, 5instagram.insta_follower 6FROM users INNER JOIN instagram 7ON users.insta_name = instagram.insta_name 8WHERE 1 9eof; 10 11if(count($csvUser)>0){ 12$sql.=" AND users.insta_name IN"; 13$sql.="(".implode(",",array_fill(0,count($csvUser),"?")).")"; 14} 15$stmt = $pdo->prepare( $sql); 16$stmt->execute($csvUser); 17$$user_list=$stmt->fetchAll(PDO::FETCH_ASSOC); 18

投稿2017/04/05 03:26

編集2017/04/05 03:38
yambejp

総合スコア114839

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

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

noe

2017/04/05 06:43

yambejp様 上記回答を参考に作成したところ、エラーなく動作しました。ありがとうございます! ただ、なぜ質問時のコードでは動かなかったのかが腑に落ちないのが正直なところです。 みなさまのご指摘があったように追記としてエラーコードを載せますので、もし原因がお分かりであれば考え方のヒントをいただきたく思います...。
yambejp

2017/04/05 06:49

>Unknown column 'username' とありますが、SELECT文でusernameを指定しているように見えません なにか別の処理を書いているのではないでしょうか?
noe

2017/04/06 05:13

そもそもusernameというカラムは無いので余計に謎です...。 ひとまず開発を進め、また原因について考えようと思います。 ありがとうございました。
guest

0

この行の最後のカンマが余計では

sql

1 instagram.insta_follower,

投稿2017/04/05 03:23

SVC34

総合スコア1149

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

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

noe

2017/04/05 06:48

回答ありがとうございます。 今回のエラーとは関係無かったようですが、この点は見落としておりました。 修正させていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問