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

Форум MySQL

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

 

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

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

тема: Column 'id_author' in where clause is ambiguous
 
 автор: Eugene77   (22.02.2008 в 15:51)   письмо автору
 
 

SQL-запрос:

SELECT *
FROM book_work_themes,
book_communication_themes
WHERE id_author =18
LIMIT 0 , 30

Ответ MySQL:

#1052 - Column 'id_author' in where clause is ambiguous

В чём тут неоднозначность?
Таблицы совершенно одинаковые.

   
 
 автор: olejek   (22.02.2008 в 16:42)   письмо автору
 
   для: Eugene77   (22.02.2008 в 15:51)
 

Поле id_author какой таблице принадлежит?
book_work_themes.id_author или book_communication_themes.id_author.
И вообще, таблицы book_work_themes и book_communication_themes нужно связать.

   
 
 автор: Eugene77   (22.02.2008 в 18:11)   письмо автору
 
   для: olejek   (22.02.2008 в 16:42)
 

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

   
 
 автор: Trianon   (22.02.2008 в 19:07)   письмо автору
 
   для: Eugene77   (22.02.2008 в 18:11)
 

что значит извлечь данные на равных?
То, что таблицы лежат в разных БД - не играет никакой роли. Практически никакой.

   
 
 автор: Eugene77   (23.02.2008 в 20:51)   письмо автору
 
   для: Trianon   (22.02.2008 в 19:07)
 

>что значит извлечь данные на равных?

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

   
 
 автор: Trianon   (23.02.2008 в 22:06)   письмо автору
 
   для: Eugene77   (23.02.2008 в 20:51)
 

>>что значит извлечь данные на равных?
>
>таблицы совершенно одиннаковые по структуре, и я хотел бы обратиться к двум таблицам так, как будто бы обращаюсь к одной таблице.

Вот Вам две таблицы, одинаковые по структуре.

t1(a, b, c)
1, 2, 3
4, 5, 6
7, 8, 9

t2(a, b, c)
10, 11, 12
13, 14, 15


Что означают Ваши слова "как будто бы обращаюсь к одной таблице"?
Каков должен быть результат запроса?
И почему он должен быть таким, а не другим?

   
 
 автор: Eugene77   (24.02.2008 в 18:08)   письмо автору
 
   для: Trianon   (23.02.2008 в 22:06)
 

результат может быть, например, 10 11 12.
Потому что в запросе есть условие b=11. Если бы это условие было найдено ещё и в других строках или в другой таблице, то результат надо сортировать по возрастанию "с"

   
 
 автор: Trianon   (24.02.2008 в 18:24)   письмо автору
 
   для: Eugene77   (24.02.2008 в 18:08)
 

а если бы такого условия не стояло?
Вообще-то условия к табличному выражению применяются уже после построения самой таблицы результата. Дальше из нее отбираются лишь удовлетворяющие условию строки.
Как должны выглядеть строки перед фильтрацией?

   
 
 автор: Eugene77   (25.02.2008 в 19:15)   письмо автору
 
   для: Trianon   (24.02.2008 в 18:24)
 

>а если бы такого условия не стояло?
Если нет условий, то это должны быть все строки всех таблиц.

Но мне, конечно, казалось, что было бы удобней не создавать такую объёмистую таблицу промежуточного результата...

   
 
 автор: Trianon   (25.02.2008 в 21:37)   письмо автору
 
   для: Eugene77   (25.02.2008 в 19:15)
 

применяйте UNION - объединение строк
Порядок полей первого и второго селектов должен соответствовать друг другу.

   
 
 автор: Eugene77   (27.02.2008 в 19:10)   письмо автору
 
   для: Trianon   (25.02.2008 в 21:37)
 

Хм!
: KirillKiev сразу это написал.
Я думал, что есть другой вариант.
Теперь я могу быть уверен что нет?

   
 
 автор: Eugene77   (27.02.2008 в 21:19)   письмо автору
 
   для: Trianon   (25.02.2008 в 21:37)
 

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

   
 
 автор: KirillKiev   (29.02.2008 в 13:54)   письмо автору
 
   для: Eugene77   (27.02.2008 в 21:19)
 

Сумма - будет работать в мускуле после 4.1

select
(
(select count(*) from book_work_themes where id_author =18)
+
(select count(*) from book_communication_themes where id_author =18)
) as s

   
 
 автор: Eugene77   (29.02.2008 в 14:42)   письмо автору
 
   для: KirillKiev   (29.02.2008 в 13:54)
 

>Сумма - будет работать в мускуле после 4.1
>

>select
>(
>(select count(*) from book_work_themes where id_author =18)
>+
>(select count(*) from book_communication_themes where id_author =18)
>) as s
>

Да - это рабочий код!
Сам до него только что догадался.
В любом случае спасибо за участие!

   
 
 автор: KirillKiev   (22.02.2008 в 18:14)   письмо автору
 
   для: Eugene77   (22.02.2008 в 15:51)
 

SELECT *
FROM book_work_themes
WHERE id_author =18
union
SELECT *
FROM  book_communication_themes
WHERE id_author =18

order by data
limit 10


если одинаковый

   
 
 автор: UshkiNaMakushke   (29.02.2008 в 14:35)   письмо автору
 
   для: Eugene77   (22.02.2008 в 15:51)
 

SELECT *
FROM book_work_themes b_w,
book_communication_themes b_c
WHERE b_w.id_author =18
LIMIT 0 , 30

и еще необходимо связать отношения
SELECT *
FROM book_work_themes b_w,
book_communication_themes b_c
WHERE b_w.* =b_c.* and b_w.id_author =18
LIMIT 0 , 30
* - атрибут по которому связываются ваши таблички

   
Rambler's Top100
вверх

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