UNION ALL возвращает массив? - PullRequest
       20

UNION ALL возвращает массив?

1 голос
/ 24 октября 2009

У меня есть SQL-оператор, который представляет собой объединение нескольких запросов.

"SELECT a, b, c, 'd' as type FROM x WHERE id = $id UNION ALL
 SELECT a, b, c, 'e' as type FROM y WHERE id = $id UNION ALL
 SELECT a, b, c, 'f' as type FROM z WHERE id = $id ORDER BY a DESC LIMIT 10";

Я пытаюсь перебрать результаты и получить значение 'a' для каждой строки, но не могу заставить его работать.

for($i =  0 ;  $i <  mysql_num_rows($result) ; $i++){
    $row = mysql_fetch_assoc($result);
    echo($row['a']);
}

Я знаю, что это глупый вопрос, но я застрял. Есть идеи, пожалуйста? Спасибо!

Ответы [ 4 ]

1 голос
/ 24 октября 2009

решаемая. Я изменил запрос на это, и он работал:

"SELECT a as A, b as B, c as C, 'd' as type FROM x WHERE id = $id UNION ALL
 SELECT a as A, b as B, c as C, 'e' as type FROM y WHERE id = $id UNION ALL
 SELECT a as A, b as B, c as C, 'f' as type FROM z WHERE id = $id ORDER BY a DESC LIMIT 10";
0 голосов
/ 26 декабря 2009

Я собираюсь ответить на реальный вопрос («UNION ALL возвращает массив?»).

Нет, union [all] не возвращает массивы , он используется для объединения наборов результатов. Если он используется в форме union all, он гарантирует, что все повторяющиеся строки в результирующем наборе результатов сохранятся.

Это all есть к этому.

0 голосов
/ 27 октября 2009

Плохая практика. Никогда не вызывайте функцию в цикле for, это вызовет проблемы с производительностью.

for($i =  0 ;  $i <  mysql_num_rows($result) ; $i++){
    $row = mysql_fetch_assoc($result);
    echo($row['a']);
}

Также вы хотите получить ассоциированный массив в цикле? это будет выполняться каждый раз, а?

Хорошая практика

$countRows = mysql_num_rows($result);

for($i=0; $i<$countRows; $i++){
    $row = mysql_fetch_assoc($result);
    echo "Row: ".$row['a']."<br />";
}

или

$row = mysql_fetch_assoc($result);

foreach($row as $key=>$value) {
   echo "Key: ".$key." Value: ".$value."<br />";
}

или

while($row = mysql_fetch_assoc($result))
{
   echo "Row: ".$row['a'] . "<br />";
}
0 голосов
/ 24 октября 2009

Вы скопировали / вставили свой код или перепечатали его?

$row = mysql\_fetch\_assoc($**g**uery);

Если подумать, вы должны вызывать mysql\_fetch\_assoc с дескриптором результата, а не с запросом.

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