我试图在mysqli查询中执行SQL代码以更频繁地选择优先级更高的行。我有一个数据库,其中所有帖子均按优先级排序,但是我希望它像这样选择(10-最高优先级):
**Priority**
10
3
10
9
7
10
9
1
10
我该怎么做?我试图通过更多方式解决该问题,但没有结果。谢谢。
答案 0 :(得分:1)
如果您要优先选择优先级更高的数据,则可以执行以下操作:
SELECT *
FROM (
SELECT OrderDetailID
,mod(OrderDetailID, 10) + 1 AS priority
,rand() * 10 AS rand_priority
FROM OrderDetails
) A
WHERE rand_priority < priority
ORDER BY OrderDetailID
此查询在W3Schools的MySQL Tryit中运行。
mod(OrderDetailID,10)+1模拟1-10优先级-您的表中已经具有该值
rand()* 10为您提供0到10之间的随机数
然后通过仅过滤随机数小于优先级的那些,您将获得优先级更高的结果集。
答案 1 :(得分:0)
如果您的MySQL版本支持rank函数,则可以使用。它将按优先级以降序对数据进行排序,并对每一行进行排名。如果两行具有相同的优先级,则两行将具有相同的排名。然后,您可以筛选出排名最高的数据,这将始终为您提供最高优先级的行。
export const updateAppTypeData = (appData) => async dispatch => {
const token = localStorage.getItem('token')
const response = await axios({
method : 'put',
url: ('http://localhost:8000/api/posts/appType/'+appData.id+'/'),
data: appData,
headers: {'Content-Type': 'application/json', 'Authorization': 'Token '+token},
json: true
}).then(function (response) {
console.log(response);
});
//dispatch({ type : FETCH_APP_TYPE , payload: response.data });
};
注意:语法可能不正确,请您编辑查询。
如果您的MySql版本不支持排名,则This帖子可能会帮助您进行排名。