Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ошибка в sql запросе: Subquery returns more than 1 row
 
 автор: ruslanaxti   (18.04.2011 в 14:27)   письмо автору
 
 

Сформировал такой запрос

"SELECT text, DATE_FORMAT(date, '%d.%m.%Y %H:%i') AS date FROM table WHERE userID=(SELECT friendsID FROM table_friends WHERE userID=6) ORDER BY id DESC LIMIT 5";

в котором мне нужно вывести текст друзей. Есть отдельная таблица друзей(table_friends) с парой id(userID) напротив id(friendsID) его друга. Предполагается вывести текст по userID где userID в таблице друзей стоит напротив 6 id друга.

Этот запрос выдает ошибку:

Warning: mysql_query() [function.mysql-query]: Unable to save result set in C:\www\html\�����\Untitled-2.php on line 38
Could not successfully run query () from DB: Subquery returns more than 1 row

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\www\html\�����\Untitled-2.php on line 48
Could not successfully run query () from DB: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\www\html\�����\Untitled-2.php on line 56

Помогите разобраться

  Ответить  
 
 автор: cheops   (18.04.2011 в 14:42)   письмо автору
 
   для: ruslanaxti   (18.04.2011 в 14:27)
 

У вас подзапрос возвращает более одной строки, поэтому нельзя использовать =, либо добавьте в подзапрос LIMIT 1
SELECT text, DATE_FORMAT(date, '%d.%m.%Y %H:%i') AS date 
FROM table
WHERE userID=(SELECT friendsID FROM table_friends WHERE userID=6 LIMIT 1)
ORDER BY id DESC
LIMIT 5
либо используйте конструкцию IN
SELECT text, DATE_FORMAT(date, '%d.%m.%Y %H:%i') AS date 
FROM table
WHERE userID IN (SELECT friendsID FROM table_friends WHERE userID=6)
ORDER BY id DESC
LIMIT 5

  Ответить  
 
 автор: ruslanaxti   (18.04.2011 в 18:42)   письмо автору
 
   для: cheops   (18.04.2011 в 14:42)
 

Беда всегда приходит не одна!

Запрос теперь работает правильно, но в моем скрипте нужно вывести 5 строк, которые функция mysql_fetch_assoc не перебирает с вложенным запросом

$query="SELECT id,fitne_text,connect_table,id_row, DATE_FORMAT(date, '%d.%m.%Y %H:%i') AS date FROM axt_fitne WHERE userID=(SELECT friendsID FROM axt_friends WHERE userID=6 LIMIT 1) ORDER BY id DESC LIMIT 5";


$i=0;

while($i<5){

$result=mysql_query($query);

$row=mysql_fetch_assoc($result);

// запрос извлекает данные пользователя имя, фамилие, фото по его userID на основе
// предыдушего запроса
$query_datauser="SELECT name,family,foto FROM axt_user WHERE userID=".$row['userID'];
$result2=mysql_query($query_datauser);

$row2=mysql_fetch_assoc($result2);

// шаблон вывода данных
echo '<div class="fitne">';
echo '<div class="fitne_foto">';
echo '<img src="images/'.$row2['foto'].'" width="50" height="50" /></div>
<div class="fitne_text"><span class="format_name">'.$row2['name'].' '.$row2['family'].': '.'</span>'.$row['fitne_text'].'<br />
<div class="fitne_time">'.$row['date'].'</div></div>
</div>';

$i++;
}


этот запрос выводит только одну и туже строку 5 раз и выдает ошибку

Could not successfully run query () from DB: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\www\html\&#65533;&#65533;&#65533;&#65533;&#65533;\Untitled-2.php on line 58

  Ответить  
 
 автор: ruslanaxti   (18.04.2011 в 18:45)   письмо автору
 
   для: ruslanaxti   (18.04.2011 в 18:42)
 

прошу прошения! этот запрос выводит только одну и туже строку 5 раз (без ошибок)

  Ответить  
 
 автор: cheops   (18.04.2011 в 18:51)   письмо автору
 
   для: ruslanaxti   (18.04.2011 в 18:42)
 

Хм... ну все верно, вы же его 5 раз выполняете функцией mysql_query(). Лучше обработать его следующим образом
<?php
  $query
="SELECT id,fitne_text,connect_table,id_row,
       DATE_FORMAT(`date`, '%d.%m.%Y %H:%i') AS `date`
       FROM axt_fitne
       WHERE userID=(SELECT friendsID FROM axt_friends WHERE userID=6 LIMIT 1)
       ORDER BY id DESC
       LIMIT 5"
;
  
$result=mysql_query($query);
  if(!
$result) exit("Ошибка выполнения запроса - ".mysql_error());
  if(
mysql_num_rows($result))
  {
     while(
$row mysql_fetch_assoc($result))
     {
        
// запрос извлекает данные пользователя имя, фамилие, фото по его userID на основе
       // предыдушего запроса 
       
$query_datauser="SELECT name,family,foto FROM axt_user WHERE userID=".$row['userID'];
       
$result2=mysql_query($query_datauser);
       if(!
$result2) exit("Ошибка выполнения запроса - ".mysql_error());
       
$row2=mysql_fetch_assoc($result2);

        
// шаблон вывода данных
       
echo '<div class="fitne">';
       echo 
'<div class="fitne_foto">';
       echo 
'<img src="images/'.$row2['foto'].'" width="50" height="50" /></div>
 <div class="fitne_text"><span class="format_name">'
.$row2['name'].' '.$row2['family'].': '.'</span>'$row['fitne_text'].'<br />
 <div class="fitne_time">'
.$row['date'].'</div></div>
 </div>'
;
     }
  }
?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования