Как поднять самые полезные отзывы наверх? - PullRequest
2 голосов
/ 16 мая 2019

Представьте себе, у меня есть несколько продуктов, у каждого продукта есть раздел обзора, и если кто-то оставляет хороший отзыв, его отзыв напоминает, что другие пользователи сочли его полезным.

У меня есть таблицас именем CustomerReview и другой таблицей с именем likeReview, и внутри этой таблицы (likeReview) у меня есть столбец:

isLike (значения true, false или null)

Мне нужно, чтобы эта таблица поднималаСамые полезные отзывы в верхней части списка.

Как мне поступить?

Я получаю ошибку, когда My SQL пытается заставить isLike сделать это, поскольку существуют обзоры (CustomerReview), которые не связаны с таблицей likeReview .

SELECT {c.pk} 
FROM{ CustomerReview as c LEFT JOIN LikeReview as l ON {c.pk} = {l.pk} } 
WHERE {c.product}=?product 
  AND {c.LANGUAGE}=?language 
ORDER BY   {l.ISLIKE } ;

my items.xml

        <relation code="Review2User" localized="false"
              generate="true" autocreate="true">
        <sourceElement qualifier="likeReview" type="LikeReview"
                       cardinality="many" >
        </sourceElement>
        <targetElement qualifier="customerReview" type="CustomerReview"
                       cardinality="one">
        </targetElement>
    </relation>

отношение

        <typegroup name="LikeReview">
        <itemtype code="LikeReview" autocreate="true" generate="true">
            <deployment table="likeReview" typecode="15088"/>

            <attributes>
                <attribute type="Customer" qualifier="customer" >
                    <modifiers optional="false" unique="true"/>
                    <persistence type="property"/>
                </attribute>
                <attribute type="CustomerReview" qualifier="review" >
                    <modifiers optional="false" unique="true"/>
                    <persistence type="property"/>
                </attribute>
                <attribute qualifier="isLike" type="java.lang.Boolean">
                    <defaultvalue>Boolean.FALSE</defaultvalue>
                    <persistence type="property"/>
                </attribute>
            </attributes>
        </itemtype>
    </typegroup>

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Я думаю, вам нужно агрегирование.Как то так:

SELECT {c.pk}
FROM { CustomerReview c LEFT JOIN
     LikeReview l
     ON {c.pk +"} = {l.pk} }
WHERE {c.product} = ?product AND
      {c.LANGUAGE +} = ?language
GROUP BY {c.pk}
ORDER BY SUM(CASE WHEN {l.ISLIKE } = "true" THEN 1 ELSE 0 END) DESC
0 голосов
/ 16 мая 2019

Попробуйте присоединиться, используя ON {c.pk} = {l.customerReview}

SELECT {c.pk}
FROM { CustomerReview c LEFT JOIN
     LikeReview l
     ON {c.pk} = {l.customerReview} }
WHERE {c.product} = ?product AND
      {c.LANGUAGE} = ?language
GROUP BY {c.pk}
ORDER BY SUM(CASE WHEN {l.ISLIKE} = "true" THEN 1 ELSE 0 END) DESC
...