必要なデータをクエリするための良い方法を見つけるのに苦労しています。私はmySQLとphpを使用しています。現在、複数のクエリを実行し、ループごとに多数のforを使用していますが、それでも必要な出力を取得できません。
これは難しい質問かもしれませんので、それを理解するために何らかの努力をしてくれた人に感謝します!
私の現在のテーブルは次のとおりです。
topics_keywords (t_k_id, topic_id, keyword_id)
keywords (keyword_id, keyword)
topics (topic_id, subject, etc)
テーブルtopics_keyword
には、同じtopic_idに関連付けられた複数のキーワードがあります。
テーブルkeywords
には、keyword_idごとに1つのキーワードのみが定義されます。
誰かが特定のキーワード(つまりスポーツ)を照会した場合、topic_idに関連するすべての関連キーワードのリストを返したいと思います。
以下のSQLでは、トピック3がkeyword_idの3(スポーツ)および4(野球)に関連付けられていることがわかります。ただし、keyword_id 2(hello)にも関連付けられていることに注意してください。
「スポーツ」が野球に関連付けられている回数を数える必要があります。簡単に言うと、簡単な方法がわかりません。
以下のデータに基づく最終的な出力は、次のようになる必要があります。
検索用語:'野球'最終出力:
count | keyword
----------------
sports | 2
hello | 1
データを調べるのに役立つmySQLを次に示します。
CREATE TABLE IF NOT EXISTS `keywords` (
`keyword_id` int(11) NOT NULL AUTO_INCREMENT,
`keyword` varchar(64) NOT NULL,
PRIMARY KEY (`keyword_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
--
-- Dumping data for table `keywords`
--
INSERT INTO `keywords` (`keyword_id`, `keyword`) VALUES
(1, 'thebump'),
(2, 'hello'),
(3, 'baseball'),
(4, 'sports'),
(5, 'manga'),
(6, 'naruto'),
(7, 'one piece');
-- --------------------------------------------------------
--
-- Table structure for table `topics_keywords`
--
CREATE TABLE IF NOT EXISTS `topics_keywords` (
`t_k_id` int(11) NOT NULL AUTO_INCREMENT,
`topics_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
PRIMARY KEY (`t_k_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
--
-- Dumping data for table `topics_keywords`
--
INSERT INTO `topics_keywords` (`t_k_id`, `topics_id`, `keyword_id`) VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 3),
(4, 3, 4),
(5, 4, 3),
(6, 5, 3),
(7, 5, 4),
(8, 6, 3),
(9, 6, 4),
(10, 3, 2);
どうもありがとう!