Требовать некоторого руководства по коду SQL;Ошибка строки подзапроса - PullRequest
0 голосов
/ 22 ноября 2018

********* РАБОЧИЙ ЗАПРОС НИЖЕ *********

SELECT  a.SubmissionId, a.FieldName, a.FieldValue
 FROM    jos_rsform_submission_values a
         INNER JOIN
         (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
               WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5', 'Status6', 'Status7', 'Status8', 'Status9', 'Status10')
                AND FieldValue = 'Pending'
                 AND FormId = 28
          ) AS test

         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'bayanno1' AND a.FormId = 28

************* END *************

Я написал следующий SQL-запрос:

SELECT SubmissionId,
   (SELECT FieldValue
      FROM jos_rsform_submission_values
     WHERE FieldName IN (SELECT FieldName
                           FROM jos_rsform_submission_values
                          WHERE FieldName = 'bayanno1')) AS FieldValue
  FROM jos_rsform_submission_values
 WHERE FieldName IN (SELECT FieldName
                       FROM jos_rsform_submission_values
                      WHERE FieldName = 'Status1')
   AND FieldValue = 'Pending'
   AND FormId = 28

Мне просто интересно, может ли кто-нибудь помочь мне внайти причину, по которой он выдает следующую ошибку:

# 1242 - подзапрос возвращает более 1 строки

У меня есть два поля втот же столбец.Один из них "bayanno1", а другой - "Status1".

Каждый из них имеет значение при отправке формы на веб-сайте.Все представления связаны с «SubmissionId».Это означает, что, если у меня есть 500 представлений формы, он не заменит значение «Status1» из «SubmissionID» 150 на значение «bayanno1» из «SubmissionId» 120.

Например:

(FieldName) "bayanno1"  = "12345" (FieldValue) ; 300 (SubmissionId) ;

(FieldName) "Status1" = "Pending" (FieldValue) ; 300 (SubmissionId) ;

Мне нужно заменить ЗНАЧЕНИЕ «Status1» на ЗНАЧЕНИЕ «bayanno1»; но только для целей запроса.Я не хочу заменять фактическое значение, только как визуальный запрос .

ТАК, что таблица с правильным SQL должна выглядеть так (я напишу PHP-запрос на своей веб-странице, чтобы извлечьинформация из базы данных и вставка в таблицу, однако эта таблица является лишь очень простым примером):

<table>
<tr>
<th>bayanno1</th>
<th>Status1</th>
</tr>
<tr>
<td>12345</td>
<td>12345</td>
</tr>
</table>

1 Ответ

0 голосов
/ 25 ноября 2018

Отредактировано - после того, как вы изменили логические требования вашего вопроса ...

Проще говоря, вы хотите извлечь значение столбца FieldValue из строк, которые содержат 28 как FormId и banyanno1 как FieldName.Кроме того, вы хотите отфильтровать эти результаты, чтобы в каждом из столбцов, которые начинаются с Status, в качестве значения SubmissionIds отображалось значение Pending (при условии, что у вас есть только эти 10 возможностей).

SELECT a.SubmissionId, a.FieldValue
FROM jos_rsform_submission_values a
INNER JOIN
    (SELECT SubmissionId
     FROM jos_rsform_submission_values
     WHERE FieldName LIKE 'Status%'
       AND FieldValue = 'Pending'
       AND FormId = 28
    ) b
ON a.SubmissionId = b.SubmissionId
WHERE a.FormId = 28
  AND a.FieldName = 'bayanno1'

Если вы хотите увидеть все столбцы, сгенерированные объединением, вы можете использовать a.*, b.* в своем предложении SELECT.

Как я уже говорил повторений до , когда выищите поддержку MySQL здесь или на JoomlaStackExchange, пожалуйста, приложите ваш вопрос с достаточным количеством структуры таблицы и данных, чтобы добровольцам, у которых нет локальной копии таблицы rs_forms_submission_values, было проще предложить помощь.Что еще более важно, добровольцы не будут знать, что у вас есть 10 различных Status строк в ваших данных, поэтому они обречены не только потерпеть неудачу, но и тратить свое время, пытаясь помочь вам.

Если вы этого не сделаетеповерьте мне, слушайте Strawberry .

Наконец, я думаю, что вы бы получили более быструю поддержку в JoomlaStackExchange, потому что многие из добровольцев там, вероятно, имеют свою собственную локальную копию таблицы и могутписать и тестировать решения непосредственно на своих собственных системах.Это вопрос, связанный с Joomla, поэтому он, безусловно, будет приветствоваться на JSE.

...