Ошибка при попытке запроса двух таблиц с помощью UNION ALL - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь запросить один результат из двух таблиц в моей базе данных. Вот мой код:

$pageid = mysql_real_escape_string($_GET['id']);
$query = sprintf("(SELECT * FROM classifieds WHERE pageid = '$pageid' LIMIT 1)
UNION ALL
(SELECT * FROM resumes WHERE pageid = '$pageid' LIMIT 1)");
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    echo $row['title'] . "<br/>";
    }

pageid является переменной URL. Этот код пытается использовать эту переменную, запросить у нее базу данных и вернуть результат. Я получаю эту ошибку:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource

Ударить стену здесь. Не могу понять, почему эта ошибка продолжает происходить. Любая помощь == спасибо.

Ответы [ 3 ]

1 голос
/ 12 декабря 2011

При использовании UNION количество столбцов и типы столбцов в обоих запросах должны быть одинаковыми.

Теперь, когда вы запрашиваете две разные таблицы, я думаю, можно с уверенностью предположить, что любое числостолбцы разные или соответствующие типы столбцов не совпадают.

попробуйте использовать что-то вроде этого

select col1, col2 from classifieds.......
Union All
select col1, col2

, но опять-таки число и соответствующие типы столбцов должны совпадать.

0 голосов
/ 12 декабря 2011

Добавьте эту обработку ошибок в ваш код:

$result = mysql_query($query);
if (!$result) {
    die('Invalid query: ' . mysql_error());
}

Не удалось выполнить ваш запрос, в результате $result было установлено на false, что не является допустимым ресурсом результатов MySQL и, следовательно, ошибкой.

Одна из возможных причин проблемы состоит в том, что две таблицы имеют неравное количество столбцов. UNION ALL ожидает, что его подзапросы вернут равное количество столбцов.

0 голосов
/ 12 декабря 2011

Выполните ваш запрос напрямую и посмотрите, возвращает ли он какие-либо строки.Кстати, какая польза от sprintf?

...