Ссылка на таблицу отношений «многие ко многим» в вычисляемом запросе SQL - App Maker - PullRequest
1 голос
/ 30 сентября 2019

У меня есть две таблицы, WaterUseData и PermitList с отношением «многие ко многим», которые записаны в таблице с обозначением имени «WaterUseDataPermits - RelatedPermits» в базе данных по умолчанию. Я запускаю вычисленный источник данных sql для таблицы WaterUseData, где ключ RelatedPermits равен параметру типа Permit key, который я передаю от клиента. Соответствующий запрос выглядит следующим образом:

SELECT
  YEAR(Date + INTERVAL 3 MONTH) AS WaterYear,
  SUM(IF(DATE_FORMAT(Date,'%m') = '10',Water_Use_Gallons,null)) as 'Oct',
  SUM(IF(DATE_FORMAT(Date,'%m') = '11',Water_Use_Gallons,null)) as 'Nov',
  SUM(IF(DATE_FORMAT(Date,'%m') = '12',Water_Use_Gallons,null)) as 'Dec',
  SUM(IF(DATE_FORMAT(Date,'%m') = '01',Water_Use_Gallons,null)) as 'Jan',
  SUM(IF(DATE_FORMAT(Date,'%m') = '02',Water_Use_Gallons,null)) as 'Feb',
  SUM(IF(DATE_FORMAT(Date,'%m') = '03',Water_Use_Gallons,null)) as 'Mar',
  SUM(IF(DATE_FORMAT(Date,'%m') = '04',Water_Use_Gallons,null)) as 'Apr',
  SUM(IF(DATE_FORMAT(Date,'%m') = '05',Water_Use_Gallons,null)) as 'May',
  SUM(IF(DATE_FORMAT(Date,'%m') = '06',Water_Use_Gallons,null)) as 'Jun',
  SUM(IF(DATE_FORMAT(Date,'%m') = '07',Water_Use_Gallons,null)) as 'Jul',
  SUM(IF(DATE_FORMAT(Date,'%m') = '08',Water_Use_Gallons,null)) as 'Aug',
  SUM(IF(DATE_FORMAT(Date,'%m') = '09',Water_Use_Gallons,null)) as 'Sep',
  SUM(Water_Use_Gallons) as Total
FROM WaterUseData
WHERE [WaterUseDataPermits - RelatedPermits].RelatedPermits = :PermitKey
GROUP BY YEAR(Date + INTERVAL 3 MONTH)
ORDER BY YEAR(Date + INTERVAL 3 MONTH) ASC

Помимо [WaterUseDataPermits - RelatedPermits] в попытке обратиться к таблице, содержащей ключи отношения, я также попробовал «WaterUseDataPermits - RelatedPermits», «WaterUseDataPermits - RelatedPermits», 'WaterUseDataPermits - RelatedPermits ', ['WaterUseDataPermits - RelatedPermits'], ["WaterUseDataPermits - RelatedPermits"] и WaterUseDataPermits_RelatedPermits. Все это привело к ошибке в синтаксисе SQL или к ошибке из-за ссылки на неизвестный столбец.

Другие ответы, которые я нашел в отношении ссылок на таблицы отношений, предлагали включать только имя таблицы дляключи отношения, такие как My_Relation_Table, но имя таблицы в App Maker не соответствует этому типу именования. Если кто-нибудь сможет помочь мне решить эту проблему, я буду признателен.

Добавлены изображения соответствующих таблиц. Ни в одной из таблиц нет полей внешнего ключа, и поле 'WR_Number', которое содержится в обеих таблицах, больше не актуально, поскольку App Maker использует настраиваемый API отношений.

PermitList Table

WaterUse Table

1 Ответ

1 голос
/ 01 октября 2019

Основываясь на полезной информации, опубликованной Брюсом в группе пользователей Googe-App-Maker, здесь https://groups.google.com/forum/#!topic/appmaker-users/wovN3w3TpT4 Я смог использовать модели Calculated SQL, чтобы получить список всех моих таблиц в моей базе данных, а затем я использовалдополнительная команда SQL для получения правильных имен столбцов в таблице отношений, что привело к скорректированному запросу, который решил мою проблему. Вот шаги, которые я предпринял для достижения этой цели:

  1. Создал вычисляемую модель SQL, назвал ее «Таблицы», создал одно поле типа «строка» и установил для параметра имени поля значение «Tables_in_MyDatabaseKey». Установите запрос источника данных на show tables;. Создал пустую страницу, создал виджет списка с источником данных, установленным в «Таблицы», создал виджет метки в строке списка и установил привязку к @datasource.item.Tables_in_MyDatabaseKey. Это привело к тому, что я смог увидеть правильное имя таблицы моей таблицы отношений.
  2. Создала другую вычисляемую модель SQL, названную «TableDescription», создала одно поле типа «строка» и установила для параметра имени поля значение«поле». Задайте для запроса источника данных значение DESCRIBE MyDBTableName; (эта часть была отредактирована для изменения DESCRIPTION на DESCRIBE, спасибо @Morfinismo за указание на эту ошибку). Добавил еще один виджет списка на мою вновь созданную страницу и установил источник данных «TableDescription», создал виджет метки в этой строке списка и установил привязку к @datasource.item.Field. Это отображало правильные имена столбцов в моей таблице.

Исправленный запрос SQL выглядит следующим образом:

SELECT
  YEAR(Date + INTERVAL 3 MONTH) AS WaterYear,
  SUM(IF(DATE_FORMAT(Date,'%m') = '10',Water_Use_Gallons,null)) as 'Oct',
  SUM(IF(DATE_FORMAT(Date,'%m') = '11',Water_Use_Gallons,null)) as 'Nov',
  SUM(IF(DATE_FORMAT(Date,'%m') = '12',Water_Use_Gallons,null)) as 'Dec',
  SUM(IF(DATE_FORMAT(Date,'%m') = '01',Water_Use_Gallons,null)) as 'Jan',
  SUM(IF(DATE_FORMAT(Date,'%m') = '02',Water_Use_Gallons,null)) as 'Feb',
  SUM(IF(DATE_FORMAT(Date,'%m') = '03',Water_Use_Gallons,null)) as 'Mar',
  SUM(IF(DATE_FORMAT(Date,'%m') = '04',Water_Use_Gallons,null)) as 'Apr',
  SUM(IF(DATE_FORMAT(Date,'%m') = '05',Water_Use_Gallons,null)) as 'May',
  SUM(IF(DATE_FORMAT(Date,'%m') = '06',Water_Use_Gallons,null)) as 'Jun',
  SUM(IF(DATE_FORMAT(Date,'%m') = '07',Water_Use_Gallons,null)) as 'Jul',
  SUM(IF(DATE_FORMAT(Date,'%m') = '08',Water_Use_Gallons,null)) as 'Aug',
  SUM(IF(DATE_FORMAT(Date,'%m') = '09',Water_Use_Gallons,null)) as 'Sep',
  SUM(Water_Use_Gallons) as Total
FROM WaterUseData, WaterUseDataPermits_HAS_Permits
WHERE WaterUseData.id = WaterUseDataPermits_HAS_Permits.WaterUseDataPermits_fk AND WaterUseDataPermits_HAS_Permits.Permits_fk = :PermitKey
GROUP BY YEAR(Date + INTERVAL 3 MONTH)
ORDER BY YEAR(Date + INTERVAL 3 MONTH) ASC
...