Консультация № 172310
18.09.2009, 21:02
0.00 руб.
0 3 0
Добрый вечер
Скажите где я допустил ошибку в mysql_query?
Код:
$gg = mysql_query("SELECT * FROM gg_news where news_id='1' UNION SELECT * FROM gg_cat WHERE cat_id='1' UNION SELECT * FROM gg_users WHERE id='1'"); $omg = mysql_fetch_array($gg);


когда добавляю Union то постоянно вылезает ошибка
Код:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/arachnid/Web/arachnid/www/news.php on line 8
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

Указывает на строку с запросом mysql_query
Хочу 3 запроса засунуть в 1, то есть, вывод новости, вывод имени автора (по айди) и вывод названия категории по айди..

Обсуждение

Неизвестный
19.09.2009, 01:04
общий
Герасимов Виталий Владиславович:

Для применения команды UNION существует правила:
1) число и порядок следования колонок должны быть одинаковы во всех запросах
2) типы данных должны быть совместимы


Ругается на mysql_fetch_array(): поскольку запрос mysql_query пуст, т.е. он не отработал.
Для отлова ошибки перенесите mysql_fetch_array(): на следующую строку и в конце запросов вставьте строку
Код:
or die ('Error: '.mysql_error ());


Код:

$gg = mysql_query("SELECT * FROM gg_news where news_id='1' UNION SELECT * FROM gg_cat WHERE cat_id='1' UNION SELECT * FROM gg_users WHERE id='1'") or die ('Error: '.mysql_error ());
$omg = mysql_fetch_array($gg) or die ('Error: '.mysql_error ());




Неизвестный
20.09.2009, 09:20
общий
абсолютно согласен насчет правил объединения запросов с предыдущим экспертом.
можно было бы привести абстрактный пример, но все же будет лучше, если вы напишите структуру своих таблиц. тогда можно будет составить вам корректный запрос.
как описать структуру:
id - число, уникальный идентификатор
name - строка, название новости/автора/категории
.....
ваш запрос не работает, потому что у разных таблиц разная структура. но это можно обойти.


но при такой форме запроса вы получит тебличку типа
id name
13 политика
14 экономика
15 новость1
16 новость2
19 иванов

насколько я понял, вам удобнее было бы получить таблицу вида
category news avtor
политика новость1 Иванов
экономика новость2 Петров

а такая таблица объединением запросов не получится. ее надо делать объединением таблиц.
опишите все это и тогда попробуем вам помочь =)
Неизвестный
20.09.2009, 12:31
общий
UNION объединяет в результат несколько запросов при условии что в каждом результате подзапросов будет одинаковое количество столбцов. В данном случае, как я понимаю, это не так. Вот и вываливается ошибка.
Рекомендую :
1) После запроса вывести на экран результат функции mysql_error();
2) Как я понял из задания вам необходимо иметь связанную информацию(т.е. для конкретной новости иметь автора и категорию). Поэтому необходимо использовать не UNION (который сначала данные в результат из первого запроса, потом из второго запроса, а потом из 3), а INNER JOIN, примерно так:
$gg = mysql_query("SELECT * FROM gg_news where news_id='1' INNER JOIN gg_cat on gg_cat.cat_id=gg_news.cat_id INNER JOIN gg_users where gg_users.id=gg_news.user_id;
Форма ответа