|
|
|
| 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
В чём тут неоднозначность?
Таблицы совершенно одинаковые. | |
|
|
|
|
|
|
|
для: Eugene77
(22.02.2008 в 15:51)
| | Поле id_author какой таблице принадлежит?
book_work_themes.id_author или book_communication_themes.id_author.
И вообще, таблицы book_work_themes и book_communication_themes нужно связать. | |
|
|
|
|
|
|
|
для: olejek
(22.02.2008 в 16:42)
| | Как связать таблицы если мне надо извлечь из них данные на равных и отсортировать, скажем по времени записи.
Таблицы имеют одинаковую структуру, просто в разных базах лежат.
Это я для эксперимента создал две одинаковых таблицы в одной базе. | |
|
|
|
|
|
|
|
для: Eugene77
(22.02.2008 в 18:11)
| | что значит извлечь данные на равных?
То, что таблицы лежат в разных БД - не играет никакой роли. Практически никакой. | |
|
|
|
|
|
|
|
для: Trianon
(22.02.2008 в 19:07)
| | >что значит извлечь данные на равных?
таблицы совершенно одиннаковые по структуре, и я хотел бы обратиться к двум таблицам так, как будто бы обращаюсь к одной таблице. При получении данных мне надо сортировать их лишь по времени, а принадлежность к той или иной таблице не должна сказываться на результатах вывода. | |
|
|
|
|
|
|
|
для: 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
Что означают Ваши слова "как будто бы обращаюсь к одной таблице"?
Каков должен быть результат запроса?
И почему он должен быть таким, а не другим? | |
|
|
|
|
|
|
|
для: Trianon
(23.02.2008 в 22:06)
| | результат может быть, например, 10 11 12.
Потому что в запросе есть условие b=11. Если бы это условие было найдено ещё и в других строках или в другой таблице, то результат надо сортировать по возрастанию "с" | |
|
|
|
|
|
|
|
для: Eugene77
(24.02.2008 в 18:08)
| | а если бы такого условия не стояло?
Вообще-то условия к табличному выражению применяются уже после построения самой таблицы результата. Дальше из нее отбираются лишь удовлетворяющие условию строки.
Как должны выглядеть строки перед фильтрацией? | |
|
|
|
|
|
|
|
для: Trianon
(24.02.2008 в 18:24)
| | >а если бы такого условия не стояло?
Если нет условий, то это должны быть все строки всех таблиц.
Но мне, конечно, казалось, что было бы удобней не создавать такую объёмистую таблицу промежуточного результата... | |
|
|
|
|
|
|
|
для: Eugene77
(25.02.2008 в 19:15)
| | применяйте UNION - объединение строк
Порядок полей первого и второго селектов должен соответствовать друг другу. | |
|
|
|
|
|
|
|
для: Trianon
(25.02.2008 в 21:37)
| | Хм!
: KirillKiev сразу это написал.
Я думал, что есть другой вариант.
Теперь я могу быть уверен что нет? | |
|
|
|
|
|
|
|
для: Trianon
(25.02.2008 в 21:37)
| | Забыл ещё сказать, мне же надо узнать общее число записей в этих таблицах, удовлетворяющее тому же условию, что и при извлечении строк.
Только при извлечении строк я боюсь что их много окажется и вывожу постранично, но общее число строк как раз для постраничного вывода требуется знать. | |
|
|
|
|
|
|
|
для: 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
|
| |
|
|
|
|
|
|
|
для: 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
>
|
Да - это рабочий код!
Сам до него только что догадался.
В любом случае спасибо за участие! | |
|
|
|
|
|
|
|
для: 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
|
если одинаковый | |
|
|
|
|
|
|
|
для: 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
* - атрибут по которому связываются ваши таблички | |
|
|
|