Как вычесть данные из одной таблицы SQL из другой в PHP?

0

Я создал мобильную игру, я храню данные оценки (минералы в этом случае) в таблице 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 "

  • 2
    Поскольку вы используете MySQL, операция EXCEPT фактически является MINUS .
  • 0
    Вы уверены, что EXCEPT работает в MySQL? Я знаю, что это может быть использовано в SQL Server, не уверен насчет MySQL.
Показать ещё 5 комментариев
Теги:

2 ответа

1
Лучший ответ

Нет необходимости в таких операторах, как 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.

  • 0
    Попробуйте код в Fiddle .
0

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;

Примечание. Вы не должны передавать параметры по строкам. Вы должны научиться правильно передавать параметры, используя заполнители, такие как ? ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню