2015-11-04 3 views
0

Текущий поисковый запрос:матч против MySQL Query против нескольких таблиц с одинаковыми полями

select * from `table1` where MATCH (`product_name`) AGAINST ('test' IN BOOLEAN MODE) AND `price` BETWEEN 0 AND 1000 order by MATCH (`product_name`) AGAINST ('test' IN BOOLEAN MODE) desc, `price` DESC LIMIT 0, 30 

Как я могу запустить приведенный выше запрос на несколько таблиц с теми же полями? например table2, table3, table4

Будет ли запрос быстрее, если я должен объединить все данные из всех таблиц в одну таблицу вместо нескольких таблиц? Или это не имеет никакого значения?

ответ

-1

Ответ на 1-й вопрос: Вы можете использовать JOINS в MySQL, который объединяет таблицу, как вы говорите.

Ответ на второй вопрос:

Один из способов:

SELECT 
    table1.this, table2.that, table2.somethingelse 
FROM 
    table1, table2 
WHERE 
    table1.foreignkey = table2.primarykey 
    AND (some other conditions) 

Второй способ:

SELECT 
    table1.this, table2.that, table2.somethingelse 
FROM 
    table1 INNER JOIN table2 
    ON table1.foreignkey = table2.primarykey 
WHERE 
    (some other conditions) 

Синтаксис WHERE более реляционная модель ориентированных где INNER JOIN - синтаксис ANSI, который вы должны использовать.

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

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

Вы всегда должны указывать код для чтения.

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

Надеется, что это помогает

+0

Пожалуйста, укажите, почему -1 –

+0

Не мою downvote, но 'JOIN', вероятно, неправильно; операция, необходимая для «нескольких таблиц с одинаковыми полями», - это 'UNION'. –

+0

Да, нисходящая минута - моя и именно по этой причине. Ответ длинный, но пропуская точку полностью (путает объединения и союзы). – fdreger

Смежные вопросы