MySQLを使用して1つのクエリで次のことを実行したいと思います。
これを1つのクエリで実行するにはどうすればよいですか? 詳細が必要な場合はお知らせください。喜んでお手伝いします私はできる限り支援します。私は作成の専門家ではありません質問があるので、必要な情報を教えてください。
これが私が今やっていることの例です:
select id from messages where parent_id=0
その後
select count(id) from messages where parent_id={{previously_chosen_id}}
ワンショットクエリを取得するにはどうすればよいですか?何かのようなもの...
select id, count(records where parent_id=the id we just asked for)
または、これを処理するためのより良い方法はありますか?なるほど、現時点では、カウントを見つけるために大量のクエリを実行する必要があります。
これは、インラインのサブクエリで簡単に実現できます。
select m.id,
(select count(*) from messages where parent_id= m.id ) as ChildCount
from messages m
where m.parent_id = 0
group by
はサブクエリが使用されるため必要です。
このクエリは、必要な出力を提供します。
SELECT
parent.id
, COUNT(child.id) AS child_count
FROM
messages parent
INNER JOIN messages child
ON child.parent_id = parent.id
WHERE parent.parent_id = 0
GROUP BY parent.id;
このコードを実際に見ることができます ここではSQL Fiddle 。
私のソリューションでは結合を使用しましたが、druzinでは相関サブクエリを使用しました。両方を試してみて、どちらが環境で速く動作するかを確認してください。 MySQLはそれらを同じ計画に減らすかもしれません。
カテゴリにサブカテゴリがない場合は、LEFT JOIN
ではなくINNER JOIN
を使用する必要があります。
SELECT `parent`.`id`
, `parent`.`name`
, COUNT(`child`.`id`) AS `hasChild`
FROM `category` `parent`
LEFT JOIN `category` `child`
ON `parent`.`id` = `child`.`parent_id`
WHERE `parent`.`parent_id` = 3780
GROUP BY `parent`.`id`