私は最近、埋め込まれたmysqlクエリでパフォーマンスの問題について何かを読んでいましたので、私は次のものを "JOIN"(おそらくより良いパフォーマンスのもの)に変更する方法を知りたかったのです。組み込みのmysqlクエリをJOINに単純化するには?
がCREATE TABLE IF NOT EXISTS `blog_categories` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
`category_name_url` varchar(300) COLLATE utf8_unicode_ci NOT NULL,
`category_status` enum('online','offline') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'offline'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=8 ;
CREATE TABLE IF NOT EXISTS `blog_articles` (
`article_id` int(11) NOT NULL AUTO_INCREMENT,
`article_title` tinytext COLLATE utf8_unicode_ci NOT NULL,
`category_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=26 ;
ロジックは、それらに関連記事を持っているすべてのカテゴリを選択するには、基本的には次のとおりです。
私は2つのテーブルを持っています。 blog_articlesテーブルの各行はcategory_name
含まれており、ここに(チェックアウトし、正常に動作します)私が使用しているクエリです:
$sql = "SELECT category_name
, category_name_url
FROM blog_categories
WHERE (
(SELECT COUNT(*)
FROM blog_articles, blog_categories
WHERE blog_articles.category_name = blog_categories.category_name
) > 0
AND blog_categories.category_status = 'online')";
は、私が「結合」することは依然として新たなんだ、とわかりませんミックスで "COUNT(*)"を使用するときにそれを変更する方法。
Jay:上記のクエリを再解析し、実装しようとしているロジックを言葉で教えてください。 –
@Mitch小麦お返事ありがとう!基本的には、関連する記事を持つすべてのカテゴリを選択することです。 'blog_articles'テーブルの各行には「category_name」が含まれています。 – Jay
とwww.devshed.com/c/a/MySQL/Understanding-SQL-Joins/ JOINsの詳細については – Leslie