Задавайте вопросы, мы ответим
Вы не зашли.
Подозреваю что пишу глупость но мне как новичку свойственно задавать такие вопросы...Что то в последнее время я начал подозревать свой Mysql и explain в частности на неадекватность поведения. Суть вот в чем, есть две таблицы account и product, в первой таблице данные о клиентах, во второй находятся данные о продуктах которые принадлежат этим самым клиентам. Задача: нужно выбрать из таблице product все строки с продуктами принадлежащии скажем Пети и Васи. Решение: SELECT FROM account tab1 LEFT JOIN product tab2 ON tab2.usr=tab1.usr WHERE tab1.usr=('Петя' OR 'Вася'). Explain пишет что для всех таблиц используется связывание ref, поиск идет по индексу usr, поле rows выдает 1!!! Для таблицы product! A naj SELECT выдает десять наименований продултов принадлежащии Пети и Васи, а всего в таблице 500 строк, как такое возможно? Не глюк ли это? Или JOIN этот волшебный
Отредактированно simple (25.03.2011 01:02:55)
Неактивен
Также тестил этот самый запрос на 1000 строк для таблице product, explain так же выдает колонку rows для product 1. Хотя Селект выводит 35 строк. Обьясните как такое возможно или всетаки explain врет?
Неактивен
WHERE tab1.usr=('Петя' OR 'Вася') — Вас эта конструкция должна была насторожить.
Вот такую подсказку дам:
mysql> SELECT 'Петя' OR 'Вася'; +--------------------------+ | 'Петя' OR 'Вася' | +--------------------------+ | 0 | +--------------------------+ 1 row in set, 2 warnings (0.00 sec)
Ну и правильный ответ сразу, наверное: WHERE usr IN ('Петя', 'Вася').
Неактивен