UNION - определить какие данные из какой таблицы...

Royal Flash

-=MaestrO=-
UNION - определить какие данные из какой таблицы...

Есть две разные таблицы, но с полностью идентичной структурой и названиями столбцов:

table1 table2
id | text id | text

При полнотекстовом поиске я написал запрос такого вида:

$sql = '(SELECT * FROM table1 WHERE MATCH(text) AGAINST("'.$str.'"))
UNION (SELECT * FROM table2 WHERE MATCH(text) AGAINST("'.$str.'")) limit 5';
$result = mysql_query($sql);
начало цикла
$r = mysql_fetch_row($result);
$text = $r[text];
конец цикла

Каким образом можно узнать, из какой таблицы (table1 или table2) в переменную $text записана информация?
 

.des.

Поставил пиво кому надо ;-)
SELECT 'table1' AS table_src, table1.* ..
UNION
SELECT 'table2' AS table_src, table2.* ..
 

Royal Flash

-=MaestrO=-
Что-то ничего не получается... Нельзя ли ссылку на описания псевдонимов или sql к конкретно моему примеру?
 

.des.

Поставил пиво кому надо ;-)
ERROR XXX: Ничего не получается; check the manual that
corresponds to your MySQL server version

Лично мне не знакомо описание ошибки "ничего не получается".
 

Royal Flash

-=MaestrO=-
.des.
Ничего не получается, это значит, что сделав запрос в базу по твоему примеру:

SELECT table1 AS psevd1, table1.* ..
UNION
SELECT 'table2' AS psevd2, table2.* ..

Получаем ошибку: Unknown column 'table1' in 'field list' Может я не совсем понял, что такое table_src?

Поискав в очередной раз по форуму сделал так:

SELECT *, table1.id AS psevd1 FROM ..
UNION
SELECT *, table2.id AS psevd2 FROM ..

В этом случае ошибок MySQL нет, запрос работает так как и должен, кроме одного: колонка psevd1 есть всегда ($r[psevd1]), в не зависимости от того, из какой таблицы взят id, а вот psevd2 нету, даже если вся найденая инфа лежит в table 2...
 

.des.

Поставил пиво кому надо ;-)
Время задать вопрос на форуме есть, а время внимательно прочитать ответы нет.
Еще раз более внимательно мой пример посмотрите, а не то что вы приводите как "мой" пример.

PHP:
SELECT 'table1' AS table_src, table1.* ..
UNION
SELECT 'table2' AS table_src, table2.* ..
PHP:
SELECT table1 AS psevd1, table1.* ..
UNION
SELECT 'table2' AS psevd2, table2.* ..
Найдете сами отличия?

Двух колонок не будет. Я не даром ей дал одно и то же название "table_src", но значения в них будут разные. Именно это значение надо использовать для того чтобы определить из какой таблицы результат.
 

Royal Flash

-=MaestrO=-
Я так понимаю, что вы предлагаете присваивать table_src имя таблицы?

Отличия есть, вот только, я же говорю, что пример ваш работать не хочет...
Unknown column 'table1' in 'field list'

XXXXXXXXXXXXXXXXXXXXXXX

Огромное спасибо, все работает! Просто чем познее, тем меньше замечаеш свои ошибки :)
 

.des.

Поставил пиво кому надо ;-)
Точный запрос который приводит к такой ошибке.
Не php код, а именно запрос!

К слову, как это должно выглядеть.
PHP:
CREATE TABLE table1(id INT NOT NULL PRIMARY KEY, text_id INT, txt TEXT, FULLTEXT(txt)) TYPE=MYISAM;

CREATE TABLE table2(id INT NOT NULL PRIMARY KEY, text_id INT, txt TEXT, FULLTEXT(txt)) TYPE=MYISAM;

INSERT INTO table1 VALUES (1,1, 'DBMS stands for DataBase');
INSERT INTO table1 VALUES (2,2, 'In this tutorial we will show ');
INSERT INTO table1 VALUES (3,3, 'MySQL has support for full-text indexing and searching');

INSERT INTO table2 VALUES (1,1, 'A full-text index in MySQL is an index of type');
INSERT INTO table2 VALUES (2,2, 'The following example is more complex. The query returns the relevance values and it also sorts the rows in order of decreasing relevance');
INSERT INTO table2 VALUES (3,3, 'A word that matches half of rows in a table is less likely to locate relevant documents');


SELECT 'table1' AS table_src, table1.* FROM table1 WHERE MATCH(txt) AGAINST('tutorial')
UNION 
SELECT 'table2' AS table_src, table2.* FROM table2 WHERE MATCH(txt) AGAINST('relevance')

+-----------+----+---------+----------------------------------------------------
| table_src | id | text_id | txt
+-----------+----+---------+----------------------------------------------------
| table1    |  2 |       2 | In this tutorial we will show
| table2    |  2 |       2 | The following example is more complex. The query re
+-----------+----+---------+----------------------------------------------------
2 rows in set (0.00 sec)
 
Сверху