Использование данных из той же таблицы MySQL в запросе - PullRequest
0 голосов
/ 23 мая 2018

Я обнаружил небольшую странную проблему.Вот запрос:

SELECT *, @allaccts := TRIM( BOTH  ',' FROM owneridslinked4billing) as 
 targetids, ( select sum(price) from orderstable where 
   paymentstatus='unpaid' and ownid in (@allaccts) ) as amountdue FROM users

Проблема в том, что выходные данные таргетинга:

110909,110910,110911,110912

(именно то, что требуется)

Но запрос выводитнеправильные результаты.Он не включает все идентификаторы (110909,110910,110911,110912) в запросе "и ownid in (@allaccts)".Я предполагаю, что он принимает все значения, разделенные запятыми, как одно, а не отдельные значения, поэтому выводит неправильные результаты.

Надеюсь, это имеет смысл.

Все, что я хочу, это попросить mysql использовать данные изowneridslinked4billing поле в запросе и вывод результата, где ownid находится в owneridslinked4billing (который представляет собой список идентификаторов, разделенных запятыми).

1 Ответ

0 голосов
/ 23 мая 2018

Использование FIND_IN_SET может предложить немедленное исправление здесь:

SELECT *, @allaccts := TRIM( BOTH ',' FROM owneridslinked4billing) as targetids,
    ( select sum(price) from orderstable
      where paymentstatus='unpaid' and
      FIND_IN_SET(ownid, @allaccts) > 0 ) as amountdue
FROM users;

Это будет работать при условии, что вы намерены найти значение ownid в списке CSV всех учетных записей 110909,110910,110911,110912.

Двигаясь вперед, вы должны избегать данных FIND_IN_SET и CSV в целом и нормализовать свои данные.Переместите каждый идентификатор в отдельную строку и выполните объединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...