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

Форум MySQL

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

 

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

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

тема: UNION
 
 автор: kapitalist   (05.06.2016 в 22:11)   письмо автору
 
 

Всем доброго времени суток. Как ни странно, но че то с не складывается у меня с union )))
Написал запрос

$sql = "
                    (SELECT `cat`.`id` FROM `cat` WHERE `cat`.`name`='".mysql_real_escape_string($ar_colls[0])."' LIMIT 1)
                        UNION
                    (SELECT `brand`.`id` FROM `brand` WHERE `brand`.`name`='".mysql_real_escape_string($ar_colls[1])."' LIMIT 1)
                        UNION
                    (SELECT `model`.`id` FROM `model` WHERE `model`.`name`='".mysql_real_escape_string($ar_colls[2])."' LIMIT 1)
                        UNION
                    (SELECT `series`.`id` FROM `series` WHERE `series`.`name`='".mysql_real_escape_string($ar_colls[3])."' LIMIT 1)
                        UNION
                    (SELECT `zip`.`id` FROM `zip` WHERE `zip`.`name`='".mysql_real_escape_string($ar_colls[4])."' LIMIT 1)
                        UNION
                    (SELECT `city`.`city_id` FROM `city` WHERE `city`.`name`='".mysql_real_escape_string($ar_colls[11])."' LIMIT 1)
                ";



На всякий случай проверил его через phpmyadmin - все отлично работает, выводит все данные, что нужно.

Дальше в php написал


$sql = mysql_query($sql) or die(mysql_error());
$r = mysql_fetch_row($sql);
print_r ($r);


Получаю результат Array ( [id] => 15 ). Собственно вопрос где другие данные? Как их вывести?
Вроде погуглил, должен через assoc выводить, в моем случае через row, но результат не выводится. В чем проблема?

  Ответить  
 
 автор: kapitalist   (06.06.2016 в 10:21)   письмо автору
 
   для: kapitalist   (05.06.2016 в 22:11)
 

Кто нибудь даст подсказку?

  Ответить  
 
 автор: KPETuH   (06.06.2016 в 10:39)   письмо автору
 
   для: kapitalist   (06.06.2016 в 10:21)
 

mysql_fetch_row


Возвращает массив с числовыми индексами, содержащий данные обработанного ряда, и сдвигает внутренний указатель результата вперед.
mysql_fetch_row() обрабатывает один ряд результата, на который ссылается переданный указатель. Ряд возвращается в виде массива. Каждая колонка располагается в следующей ячейке массива, начиная с нулевого индекса

http://php.net/manual/ru/function.mysql-fetch-row.php

  Ответить  
 
 автор: kapitalist   (06.06.2016 в 11:25)   письмо автору
 
   для: KPETuH   (06.06.2016 в 10:39)
 

А я разве не mysql_fetch_row использую?
В первом сообщение не правильно написал, ответ такой Array ( [0] => 15 )

  Ответить  
 
 автор: confirm   (06.06.2016 в 11:57)   письмо автору
 
   для: kapitalist   (06.06.2016 в 11:25)
 

А разве нет?
Запрос возвращает несколько рядов, а значит получить их все, это обход циклом, в котором mysql_fetch_row будет возвращать данные строки и смещать указатель на следующую. Вы же кодом запросили только одну строку, и чему удивляетесь?

  Ответить  
 
 автор: kapitalist   (06.06.2016 в 12:12)   письмо автору
 
   для: confirm   (06.06.2016 в 11:57)
 

В моем понимании это как один запрос. И я думал что возвращается один массив.
В таком случае не быстрее ли будет сделать запрос типа
SELECT `cat`.`id`, `cat`.`id_parent`, `brand`.`id`, `model`.`id`, `series`.`id`, `zip`.`id`, `city`.`city_id`
                    FROM `cat`, `brand`, `model`, `series`, `zip`, `city` WHERE
                    `cat`.`name`='".mysql_real_escape_string($ar_colls[0])."' and
                    `brand`.`name`='".mysql_real_escape_string($ar_colls[1])."' and
                    `model`.`name`='".mysql_real_escape_string($ar_colls[2])."' and
                    `zip`.`name`='".mysql_real_escape_string($ar_colls[4])."' and `zip`.`id_parent`!='0' and
                    `city`.`name`='".mysql_real_escape_string($ar_colls[11])."' $dop_sql LIMIT 1

?

  Ответить  
 
 автор: kapitalist   (06.06.2016 в 12:16)   письмо автору
 
   для: confirm   (06.06.2016 в 11:57)
 

И прогоняя через while получаю ответ
Array ( [0] => 16 ) Array ( [0] => 4 ) Array ( [0] => 64 ) Array ( [0] => 1 ) Array ( [0] => 255 ) Array ( [0] => 4400 )

  Ответить  
 
 автор: confirm   (06.06.2016 в 14:40)   письмо автору
 
   для: kapitalist   (06.06.2016 в 12:16)
 

А зачем цикл в этом случае?

  Ответить  
 
 автор: kapitalist   (06.06.2016 в 14:55)   письмо автору
 
   для: confirm   (06.06.2016 в 14:40)
 

Если делать через UNION Вы сами сказали, что нужно. Я показываю, что смещение не происходит.
Если делать, как во втором варианте, цикл не нужен. Но запрос выполняется в 2 раза медленнее.

  Ответить  
 
 автор: KPETuH   (06.06.2016 в 15:18)   письмо автору
 
   для: kapitalist   (06.06.2016 в 14:55)
 

Какого смещения у вас не происходит? UNION фактически склеивает результаты запросов, поэтому у вас получается на выдаче один столбец и несколько строк.

  Ответить  
 
 автор: confirm   (07.06.2016 в 06:12)   письмо автору
 
   для: kapitalist   (06.06.2016 в 14:55)
 

Ну это UNION, а второй ваш запрос иной и LIMIT 1, что в этом случае будет возвращено?

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

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