Перейти к содержимому


Выбрать шаблон и создать сайт

DISTINCT

#1 FordogeN

FordogeN
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0
0

Отправлено 10 Июль 2009 - 15:53

Делаю скрипт поиска по товарам и столкнулся со следующей проблемой - бывает попадаются товары с одинаковым названием что я фильтрую через DISTINCT, но при фильтрации я теряю возможность выводить информацию из других полей БЕЗ фильтрации (она на других полях не нужна).
Помогите решить данную проблему.

Вот код моего запроса:
SELECT DISTINCT name FROM items WHERE name LIKE 'поисковая фраза' LIMIT 0, 20;

 

 

  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#2 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 10 Июль 2009 - 16:36

Пробуй уточнять таблицу и столбец. Пример:
SELECT DISTINCT name.surename FROM items WHERE name.surename LIKE 'поисковая фраза' LIMIT 0, 20;
Тоесть: таблица.столбец
Или даже можно: база.таблица.столбец хД
  • 0


#3 FordogeN

FordogeN
    Topic Starter
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 10 Июль 2009 - 17:01

Пробуй уточнять таблицу и столбец. Пример:

SELECT DISTINCT name.surename FROM items WHERE name.surename LIKE 'поисковая фраза' LIMIT 0, 20;
Тоесть: таблица.столбец
Или даже можно: база.таблица.столбец хД

в уточнении нет необходимости - и без него все работает. Проблема в другом - в чем, я написал выше.
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата



#4 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 10 Июль 2009 - 17:11

Может с помощью подзапросов? Сам сильно не разобрался, только прочитал и все... Погугли "подзапросы" и "временные таблицы".
  • 0


#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 11 Июль 2009 - 15:29

FordogeN, А скажи мне... Что ты хочешь выводить?
Я не пойму, у тебя есть база товаров, почему ты не мог сделать один и тот же твар и поле к нему с количеством. можно конечно сгруппировать по полю name. Тогда запись будет возращать первую уникальную, а остальные отбрасывать.
Тогда можно написать такой запроc:
SELECT *, COUNT(name) as count FROM items WHERE name LIKE '%поисковая_фраза%' GROUP BY(name) LIMIT 20  ;

Тогда:
У нас будут все поля + count(количество совпадений по полю которому группируем).
% - поставил, чтобы искала не точное совпадение, а вхождение.
А LIMIT 0,20 можно заменить просто на LIMIT 20(Взять только первые 20 записей)
  • 0

#6 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 12 Июль 2009 - 21:01

Я вроде понял... Вот так?
SELECT * name=(SELECT * DISTINCT name) FROM items WHERE name LIKE 'поисковая фраза' LIMIT 0, 20;
или скорее типа так:
SELECT * name=(SELECT * DISTINCT name as `distname`) FROM items WHERE `distname` LIKE 'поисковая фраза' LIMIT 0, 20;

  • 0


#7 FordogeN

FordogeN
    Topic Starter
  • Пользователь
  • 1 414 сообщений
  • Репутация: 0

Отправлено 12 Июль 2009 - 22:58

Я вроде понял... Вот так?

SELECT * name=(SELECT * DISTINCT name) FROM items WHERE name LIKE 'поисковая фраза' LIMIT 0, 20;
или скорее типа так:
SELECT * name=(SELECT * DISTINCT name as `distname`) FROM items WHERE `distname` LIKE 'поисковая фраза' LIMIT 0, 20;

не знаю что ты понял, но Леха написал именно то что мне нужно)
  • 0

Как настроить выдержку и диафрагму зеркального фотоаппарата




Оформление форума – IPBSkins.ru