Mysql возвращает более одной ошибки запроса - PullRequest
0 голосов
/ 13 сентября 2018

Хорошо, ниже приведен полный код php для этого

 $sql = "
 SELECT text 
      , creator
      , (SELECT name 
           FROM accounts 
          WHERE id IN (SELECT creator  
                         FROM groupcomments 
                        WHERE `group` = '$viewgroupid'
        ) AS account_name
      , (SELECT lastname 
           FROM accounts 
          WHERE id IN (SELECT creator 
                        FROM groupcomments 
                       WHERE `group` = '$viewgroupid'
                      )
        ) AS account_lastname
      , (SELECT role 
           FROM accounts 
          WHERE id IN (SELECT creator 
                         FROM groupcomments 
                        WHERE `group` = '$viewgroupid'
                      )
        ) AS account_role
      , (SELECT picture 
            FROM accounts 
           WHERE id IN (SELECT creator 
                          FROM groupcomments 
                         WHERE `group` = '$viewgroupid'
                       )
        ) AS account_picture
      , (SELECT id 
           FROM accounts 
          WHERE id IN (SELECT creator 
                         FROM groupcomments 
                        WHERE `group` = '$viewgroupid'
                      )
        ) AS account_id 
     FROM groupcomments 
    WHERE `group`='$viewgroupid'
 ";
$result = $conn->query($sql);

if ($result->num_rows > 0) {

    while($row = $result->fetch_assoc()) {
      $gc_text = $row['text'];
      $u_name = $row['account_name'];
      $u_lastname = $row['account_lastname'];
      $u_userid = $row['account_id'];
      $u_picture = $row['account_picture'];
      $u_role = $row['account_role'];
      include 'files/social/groupcomment.php';
    }
 //
}

По сути, это то, что предполагается сделать, это выбрать данные из таблицы accounts и из таблицы groupcomments, а затем включить файл, который будет отображать имя и фамилию, это прекрасно работает, когда в таблице * есть только одна строка groupcomments но как только я добавляю еще одну строку, я получаю следующую ошибку: Subquery returns more than 1 row in htdocs/group.php:134 Stack trace: #0 htdocs/group.php(134): mysqli->query('SELECT text, cr...') #1 {main} thrown in htdocs/group.php on line 134

и в строке 134: $result = $conn->query($sql);

Как я могу заставить это работать с более чем одной строкой?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Почему бы просто:

    $sql = "
     SELECT gc.text 
          , gc.creator
          , a.name     AS account_name
          , a.lastname AS account_lastname
          , a.role     AS account_role
          , a.picture  AS account_picture
          , a.id       AS account_id 
         FROM groupcomments gc
         JOIN accounts a on gc.creator = a.id
        WHERE gc.`group`='$viewgroupid'
     ";

Ваша ошибка означает, что существует более чем groupcomments.creator, имеющий group = '$ viewgroupid', и вы получили ошибку, потому что вы не можете поместить несколько имен в один и тот же столбец встрока.С объединением это не произойдет (вы можете получить повторяющиеся строки, но у вашего конкретного запроса такой проблемы не будет).

HTH, Set

0 голосов
/ 13 сентября 2018

Вы можете изменить код SQL,

$sql="SELECT 
text , creator, `ac`.name as account_name, `ac`.lastname as account_lastname, `ac`.role as account_role, `ac`.`id` as account_id 

FROM groupcomments AS gp 
INNER JOIN accounts as ac
ON `ac`.`id` =`gp`.`creator`

WHERE 
`gp`.`group`='$viewgroupid' 

"; 
$result = $conn->query($sql);

if ($result->num_rows > 0) {

while($row = $result->fetch_assoc()) {
  $gc_text = $row['text'];
  $u_name = $row['account_name'];
  $u_lastname = $row['account_lastname'];
  $u_userid = $row['account_id'];
  $u_picture = $row['account_picture'];
  $u_role = $row['account_role'];
  include 'files/social/groupcomment.php';
}

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