JOINしたい2つのテーブルがあります。これら 2 つのテーブルに対して INNER JOIN を実行して、必要な結果を取得したいのですが、機能していないようです。クエリを実行するたびに、表示に時間がかかりすぎる読み込み中... 通知が表示され、数分後に次のメッセージが表示されます。
リクエストの処理中にエラーが発生しました。エラー コード 500。内部サーバー エラー。
基本的に、次の形式で結果を取得したいと思います。
- 姓名、電話番号
- 購読しているリスト (購読者のステータス) - 購読した日付。
ex.) 望ましい結果:
Jane Doe, 082 980 9514
Home Loan Applications (Active) - 17/07/2013
Credit Report (Free Report) (Unsubscribed) 12/06/2013
サンプル テーブルへのリンクは次のとおりです: テーブル
Jane Doe が 2 つのリスト (Home Loan Applications と Credit Report) を購読しているため、2 つのリストが結果に表示されていることがわかります。次に、彼女はすでに信用報告書の購読を解除しているため、横に (購読解除済み) と表示されています。
これは、私が使用した SQL ステートメントです。
SELECT emailaddress, subscribedate, unsubscribed
FROM `interspire_subscriber`
INNER JOIN `interspire_customfield` ON interspire_subscriber.subscriberid =
interspire_customfield.subscriberid
エラーが発生する理由がわかりません。mySQLのみを使用してこれを達成する方法はありますか? または、これを取得するためにPHPで他に何をしますか?
76,000 件以上のレコードがあるため、スクリプトの実行も遅すぎるようです。
更新: 提案どおり、両方のテーブルのサブスクライバー ID をインデックスとして設定し、クエリは正常に機能しました。現在、私はこのmysqlステートメントを使用しています:
SELECT interspire_customfield.subscriberid, interspire_customfield.fname,
interspire_customfield.lname, interspire_customfield.phone, emailaddress,
subscribedate, unsubscribed, interspire_customfield.listid, listname
FROM`interspire_subscriber` INNER JOIN `interspire_customfield` ON
interspire_subscriber.subscriberid = interspire_customfield.subscriberid
ただし、ユーザーが購読しているすべてのリストを一覧表示するわけではありません。