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

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

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

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

PHP

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

Q&A

2回答

1622閲覧

PHPとMySQLで検索システムー2つの要素から該当する記事を表示

twin_bird

総合スコア230

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/09/17 15:35

編集2015/09/17 16:01

PHPとMySQLを一通り学んだのですが、まだまだデータベースの設計は勉強不足なのようで、アドバイスを頂きたく思います。

電車の「線」と「駅名」を選択すると該当する「記事(タイトルと記事名、線、駅名)」が表示される検索システムを作りたいと考えています。

ex. 「南武線」「川崎駅」 → 記事A、記事B、、、 (検索結果は一つは限りません。)

そこで
「線」と「駅名」で1テーブル、 「記事」で1テーブルとし、それらのテーブルを関連付ける?やり方がデータベースで重複を防ぐ最善策かと思ったのですが、その関連付ける方法がわかりません。。。

テーブルを分けた場合に両者を関連づける方法、またはもっと単純明快なテーブルの作り方などがあればお教えください。
よろしくお願いします。

※言葉足らずの部分があるかと思いますが適宜説明を加えさせていただきたく思います。

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

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

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

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

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

guest

回答2

0

自分だったら、基本的には、以下のように設計します。インデックスとかは省略してます。

sql

1CREATE TABLE `ARTICLES` ( 2 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 3 `station_id` int(11) DEFAULT NULL, 4 `content` varchar(1000) DEFAULT NULL, 5 PRIMARY KEY (`id`) 6) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 7 8 9CREATE TABLE `LINES` ( 10 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 11 `line_name` varchar(255) DEFAULT NULL, 12 PRIMARY KEY (`id`) 13) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 14 15 16CREATE TABLE `LINK_LINE_STATION` ( 17 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 18 `line_id` int(11) DEFAULT NULL, 19 `staion_id` int(11) DEFAULT NULL, 20 PRIMARY KEY (`id`) 21) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 22 23 24CREATE TABLE `STATIONS` ( 25 `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 26 `staion_name` varchar(255) DEFAULT NULL, 27 PRIMARY KEY (`id`) 28) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

sql

1SELECT 2 `ARTICLES`.`id` 3 , `ARTICLES`.`content` 4 , `STATIONS`.`station_name` 5 , `LINES`.`line_name` 6FROM 7 `ARTICLES` 8INNER JOIN 9 `STATIONS` 10ON 11 `ARTICLES`.`station_id` = `STATIONS`.`id` 12LEFT JOIN 13 `LINK_LINE_STATION` 14ON 15 `STATIONS`.`id` = `LINK_LINE_STATION`.`staion_id` 16LEFT JOIN 17 `LINES` 18ON 19 `LINK_LINE_STATION`.`line_id` = `LINES`.`id` 20WHERE 21 `LINES`.`line_name` LIKE '%路線名%'

投稿2015/09/17 15:55

編集2015/09/17 16:41
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

twin_bird

2015/09/17 16:07 編集

コードまでかいていただきありがとう御座います。 ばらばらに分けるのですね〜 参考にさせていただきます! ところで、この場合、検索結果を表示させる場合はどのようなコードをかくのでしょうか?
退会済みユーザー

退会済みユーザー

2015/09/17 16:08

何えお検索条件にして、どの値を取り出したいかによって変わります。
guest

0

「線」と「駅名」で1テーブル

これだと、「駅名」だけでぶら下げる記事が作りづらくなるし、
検索時も、「駅名」だけで引っ張ってきたいといった時も、対処しづらくなる。

あと、内容が「記事」であれば、作成日時(更新日時・投稿日時)が欲しい。
最新の記事がどれなのかわからなくなってしまう。

DB設計のの手順としては、

1.取り扱いたい項目を全て書き出して並べる。
「タイトル」「記事」「線」「駅名」「作成日時」

2.データを登録していくと重複する項目(またはグループ)で分ける。(第一正規化)
・「タイトル」「記事」「作成日時」
・「線」
・「駅名」

3.分けたグループごとに、データを一意に決定できる項目(以降、主キー)を選択、
なければ追加(第二正規化①)
・「タイトル」「記事」「作成日時」→「記事ID」(登録時自動採番)を追加
・「線」→「路線コード」(一意となる任意コード)を追加
・「駅名」→「駅コード」(一意となる任意コード)を追加

4.分けたグループを主キー関連付けさせる(第二正規化②)
・「記事ID」「タイトル」「記事」「作成日時」→「路線コード」「駅コード」追加
・「路線コード」「線」
・「駅コード」「駅名」

と言った感じ。多少我流が入ってるかもしれないので。
正規化については、ネットで知識を深めてください。

投稿2015/09/17 22:58

TetsujiMiwa

総合スコア1124

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

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

twin_bird

2015/09/18 04:23

回答ありがとうございます。 どういう手順で設計していけばいいのか迷っていたので参考になります!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問