Вы должны группировать таблицу, когда пытаетесь выбрать такие функции, как count. Ответ будет выглядеть так:
SELECT fc.id AS replyId, user.username AS owner, fc.reply_content AS content,
fc.created_at AS createdAt, COUNT(rl.id) AS likes
FROM forum_replies fc
JOIN users user
ON fc.owner_id = user.id
JOIN reply_likes rl
ON fc.id = rl.reply_id
WHERE fc.post_id = (I do not know what does it mean):postId AND fc.is_shown = 1
GROUP BY fc.id, user.username, fc.reply_content, fc.created_at
ORDER BY fc.created_at DESC
Только то, что я не понял, что означает "fc.post_id =: postId". В противном случае, после добавления «Сгруппировать по», ваш скрипт будет работать правильно.
Если вы передадите переменную как $ {name}, это явно определяет, где находится конец имени переменной и где начинается остальная часть строки в кавычках. Например, в вашем коде:
if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
Без разделителей {}
:
if ($baseline !~ /^$component_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
Обратите внимание, что переменная $ component (вы можете ссылаться на нее в любом случае) будет неверно истолкована как $ component_ из-за завершающего подчеркивание в регулярном выражении.
Во-первых, это называется интерполяцией строк. Хорошая причина использовать его в этом случае - запретить интерпретацию $ project_root как $ project_root_ (обратите внимание на завершающее подчеркивание). Он делает явным имя переменной, вместо того, чтобы оставлять его более сложным правилам интерполяции.
См. Perldata для дополнительной информации об интерполяции, а также perlre и perlop об особенностях интерполяции в операторах регулярных выражений.
Как упоминалось выше, он предназначен для разделения имен переменных. Слишком много фигурных скобок делает сложные регулярные выражения еще сложнее. У фигурных скобок есть свои собственные регулярные выражения (для ограничения количества совпадений с шаблоном). Я бы порекомендовал использовать модификатор regexp / x и переписать ваше регулярное выражение следующим образом:
if ($baseline !~ /^$component # Start with $component
_ # then an underscore
(|.*_) # Then nothing, or anything followed by an underscore
$phase # ...
\.\d+ # ...
(| # Then optionally:
[a-z]| # lower alpha
-\d+| # or ...
$automateddigit
)
$/x &&
$baseline !~ /^$project_root
_
$phase
\.\d+
(|
[a-z]|
-\d+|
$automateddigit
)$/x)