Я создал мобильную игру, я храню данные оценки (минералы в этом случае) в таблице sql. Теперь я хочу создать дневную диаграмму очков, вычитая вчерашние оценки из двух дней. Я обнаружил, что могу сделать это с помощью EXCEPT, но ничего не пытаюсь работать.
$sql = "SELECT playerid, playername, minerals, daydate
FROM dailyscore WHERE daydate = '".$yesterday."'
EXCEPT
SELECT playerid, playername, minerals, daydate
FROM dailyscore WHERE daydate = '".$twodays."'
ORDER BY minerals DESC";
Я получаю эту ошибку: Ошибка SQL: "У вас есть ошибка в синтаксисе SQL, проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с" EXCEPT SELECT playerid "," Псевдоним "," Минералы "," Даты дня "FROM dailyscore WHERE da ' в строке 3 "
Нет необходимости в таких операторах, как EXCEPT или MINUS. Просто вычислите разницу в дневных баллах, присоединив баллы за два дня:
SELECT playerid, playername, minerals
FROM (
SELECT ds_yesterday.playerid,
ds_yesterday.playername,
CASE
WHEN ds_twodays.minerals IS NULL
THEN ds_yesterday.minerals
ELSE ds_yesterday.minerals - ds_twodays.minerals
END minerals
FROM dailyscore as ds_yesterday
LEFT JOIN dailyscore as ds_twodays ON
ds_twodays.playerid = ds_yesterday.playerid
AND ds_twodays.daydate = '2018-08-07'
WHERE ds_yesterday.daydate = '2018-08-08'
) scoredifference
ORDER BY minerals DESC;
Вы можете использовать этот SQL и поместить его в свой PHP-код. Даты должны быть заменены значениями, хранящимися в переменных PHP.
MySQL не поддерживает EXCEPT
. Я думаю, вы используете:
SELECT ds.playerid, ds.playername, ds.minerals, ds.daydate
FROM dailyscore ds
WHERE daydate = '".$yesterday."' AND
NOT EXISTS (SELECT 1
FROM dailyscore
WHERE ds2.playerid = ds.playerid AND
ds2.minerals = ds.minerals AND
ds2.daydate = '".$twodays."'
)
ORDER BY ds.minerals DESC;
Примечание. Вы не должны передавать параметры по строкам. Вы должны научиться правильно передавать параметры, используя заполнители, такие как ?
,
EXCEPT
фактически являетсяMINUS
.