Есть таблица А, в ней поле `n` tinyint(3) отвечающее за название детали. Всего названий около 100. В этом поле все хранится в цифре, а литерное описание в таблице деталей В, все как полагается. Строк в А около 100 тысяч.
При выборе из списка детали, т.е.
WHERE `n`='95'происходит фильтрация таблицы, в браузере показываются нужные строки с n=95.
Хочу сделать, чтоб в списке на странице были только те детали, которые зарегистрированы, в таблице А, а не все подряд, которые существуют в таблице В.
Выхода вижу два, либо:
1. При рисовании списка циклом из таблицы В каждый раз делать SELECT COUNT(*) FROM tabA WHERE `n`='1'..4..99. Т.е. проверять есть значение детали в таблице или нет, если есть то рисуем в селект если нет, то ничего не рисуем. Но наверное это будет сильно загружать сайт, несмотря на мгновенность COUNT(*) будет 100 запросов.
2. Попробывать вести таблицу С где считать занесенные значения в таблицу А по принципу счетчика, занесли + удалили -, но таблица эта может стать гигантской т.к. таких деталей может быть много.
Может есть у кого-то идеи, как это можно еще по другому сделать?
Спасибо.
Спустя 1 час, 37 минут, 37 секунд (9.05.2012 - 10:50) Oyeme написал(а):
Поставить unique index на колонку 'n' (таблицa A,если значения колонки n уникальны)
Здесь можно сделать обычный join.Вывести то что совпало из таблицы А и таблицы B.
Здесь можно сделать обычный join.Вывести то что совпало из таблицы А и таблицы B.
Спустя 2 минуты, 31 секунда (9.05.2012 - 10:52) johniek_comp написал(а):
я бы сделал так
и не забудь про индексы когда с where работаешь
SELECT DISTINCT c.n
FROM `A` AS c
INNER JOIN `B` AS t ON
(t.n = c.n)
ORDER BY c.n
и не забудь про индексы когда с where работаешь
Спустя 1 час, 7 минут, 45 секунд (9.05.2012 - 12:00) GET написал(а):
Oyeme
не уникальны, но мысль понял
johniek_comp
точно!...попробую так!
Спасибо.
не уникальны, но мысль понял
johniek_comp
точно!...попробую так!
Спасибо.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.