|
|
|
| Всем доброго времени суток. Как ни странно, но че то с не складывается у меня с 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
(05.06.2016 в 22:11)
| | Кто нибудь даст подсказку? | |
|
|
|
|
|
|
|
для: kapitalist
(06.06.2016 в 10:21)
| |
Возвращает массив с числовыми индексами, содержащий данные обработанного ряда, и сдвигает внутренний указатель результата вперед.
mysql_fetch_row() обрабатывает один ряд результата, на который ссылается переданный указатель. Ряд возвращается в виде массива. Каждая колонка располагается в следующей ячейке массива, начиная с нулевого индекса
http://php.net/manual/ru/function.mysql-fetch-row.php | |
|
|
|
|
|
|
|
для: KPETuH
(06.06.2016 в 10:39)
| | А я разве не mysql_fetch_row использую?
В первом сообщение не правильно написал, ответ такой Array ( [0] => 15 ) | |
|
|
|
|
|
|
|
для: kapitalist
(06.06.2016 в 11:25)
| | А разве нет?
Запрос возвращает несколько рядов, а значит получить их все, это обход циклом, в котором mysql_fetch_row будет возвращать данные строки и смещать указатель на следующую. Вы же кодом запросили только одну строку, и чему удивляетесь? | |
|
|
|
|
|
|
|
для: 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
|
? | |
|
|
|
|
|
|
|
для: 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 ) | |
|
|
|
|
|
|
|
для: kapitalist
(06.06.2016 в 12:16)
| | А зачем цикл в этом случае? | |
|
|
|
|
|
|
|
для: confirm
(06.06.2016 в 14:40)
| | Если делать через UNION Вы сами сказали, что нужно. Я показываю, что смещение не происходит.
Если делать, как во втором варианте, цикл не нужен. Но запрос выполняется в 2 раза медленнее. | |
|
|
|
|
|
|
|
для: kapitalist
(06.06.2016 в 14:55)
| | Какого смещения у вас не происходит? UNION фактически склеивает результаты запросов, поэтому у вас получается на выдаче один столбец и несколько строк. | |
|
|
|
|
|
|
|
для: kapitalist
(06.06.2016 в 14:55)
| | Ну это UNION, а второй ваш запрос иной и LIMIT 1, что в этом случае будет возвращено? | |
|
|
|