Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку из БД / 17 сообщений из 17, страница 1 из 1
22.05.2015, 17:51:44
    #38966678
satanicman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Здравствуйте уважаемые форумчане, первый раз пишу на форму, так что не обессудте. Суть проблемы такова. Есть таблица товаров в которую ИМХО рукожопый 1с-к непойми как выгружает товары. Так вот у одного товара может быть несколько вариантов в бд для таких случаев предусмотрена специальная таблица(variants) в которой по ид товара ему прописываются варианты, но этот 1ск выгружает все товары скопом в основную таблицу товаров(products) и определить что все это варианты одного товара можно только при помощи поля(external_id, у одинаковых товаров он тоже одинаковый) и вот собственно вопрос мне сначала нужно было просто вывести всего один из вариантов товара на странице я это реализовал через запрос, просто указав GROUP BY external_id, но теперь стала задаче сделать так, есть 1 товар который называется Модель 102 Орех ПГ550x1900мм у него есть собственно те самые варианты, к примеру Модель 102 Орех ПО550x1900мм, Модель 102 Орех ПГ650x1900мм, Модель 102 Орех ПГ850x1900мм и Модель 102 Орех ПО650x1900мм, у всех этих товаров external_id один и тот же. Мне нужно сделать запрос который бы в результате из этих 5 товаров вернул бы только 2 один у которого в названии встречается ПО и другой у которого ПГ встречается. Т.е нужно сгруппировать товары при этом учитывая встречается ли в имени ПГ и ПО. Надеюсь более-менее понятно изложил проблему.
...
Рейтинг: 0 / 0
22.05.2015, 17:59:48
    #38966683
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
ФАК раздела рассказывает, как вернуть первую запись в некоей группе. У тебя группы - по external_id.
Составляешь запрос, который вернёт по 1 записи для каждого external_id с отбором по присутствию подстроки "ПГ". Второй - аналогичный, но с подстрокой "ПО". И затем UNION ALL этих запросов.
...
Рейтинг: 0 / 0
22.05.2015, 18:00:39
    #38966686
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
И как должен выглядеть результат на таких исходных данных? Желательно показать в табличном виде, а не художественным текстом.
...
Рейтинг: 0 / 0
22.05.2015, 18:14:09
    #38966702
satanicman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
miksoft,

idnameexternal_id1Модель 102 Орех ПО900x2000мм Карельские двери2a379074-8c8d-11e3-a388-001fc6ea9c8d2Модель 102 Орех ПО700x2000мм Карельские двери2a379074-8c8d-11e3-a388-001fc6ea9c8d3Модель 102 Орех ПГ900x2000мм Карельские двери2a379074-8c8d-11e3-a388-001fc6ea9c8d4Модель 102 Орех ПГ600x2000мм Карельские двери2a379074-8c8d-11e3-a388-001fc6ea9c8d5Модель 102 Орех ПО600x2000мм Карельские двери2a379074-8c8d-11e3-a388-001fc6ea9c8d

Вот к примеру из этой таблице нужно получить 2 товара, один у которого ПГ в имени а другой у которого ПО а остальные сгруппировать
...
Рейтинг: 0 / 0
22.05.2015, 18:14:52
    #38966704
lamer yuga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
навскидку
Код: sql
1.
2.
3.
 
WHERE model REGEXP 'П[ОГ]'
GROUP BY external_id, if(model like '%ПГ%',1,2)
...
Рейтинг: 0 / 0
22.05.2015, 18:17:31
    #38966711
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
satanicmanа остальные сгруппироватьЯ этого не понимаю. Поэтому и прошу показать конкретный желаемый результат.
...
Рейтинг: 0 / 0
22.05.2015, 18:22:05
    #38966719
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
lamer yuga , мимо. Так он получит 2 записи с ПГ и ни одной с ПО...
...
Рейтинг: 0 / 0
22.05.2015, 18:23:14
    #38966722
satanicman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
miksoft,
id name external_id1 Модель 102 Орех ПО900x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d2 Модель 102 Орех ПО700x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d3 Модель 102 Орех ПГ900x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d4 Модель 102 Орех ПГ600x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d5 Модель 102 Орех ПО600x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d
В результате запрос должен выдать 2 товара, к примеру Модель 102 Орех ПО900x2000мм Карельские двери и Модель 102 Орех ПГ900x2000мм Карельские двери
...
Рейтинг: 0 / 0
22.05.2015, 18:24:17
    #38966723
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Akina lamer yuga , мимо. Так он получит 2 записи с ПГ и ни одной с ПО...Почему? Вроде по штучке каждого должно получиться. А вот неких "остальных" не будет.
...
Рейтинг: 0 / 0
22.05.2015, 18:27:40
    #38966725
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
satanicmanmiksoft,
id name external_id1 Модель 102 Орех ПО900x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d2 Модель 102 Орех ПО700x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d3 Модель 102 Орех ПГ900x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d4 Модель 102 Орех ПГ600x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d5 Модель 102 Орех ПО600x2000мм Карельские двери 2a379074-8c8d-11e3-a388-001fc6ea9c8d
В результате запрос должен выдать 2 товара, к примеру Модель 102 Орех ПО900x2000мм Карельские двери и Модель 102 Орех ПГ900x2000мм Карельские двериКак я понимаю, все равно, какая именно запись с "ПГ" и какая именно запись с "ПО" будет в результате?
А кто такие "остальные" ?

Без учета этих "остальных" будет примерно как предложил lamer yuga:
Код: sql
1.
2.
3.
4.
SELECT MIN(name)
FROM mytable
WHERE name REGEXP 'П[ОГ]'
GROUP BY external_id, name like '%ПГ%'
...
Рейтинг: 0 / 0
22.05.2015, 18:32:01
    #38966727
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
miksoft
Код: sql
1.
SELECT MIN(name)


Так - да.
...
Рейтинг: 0 / 0
22.05.2015, 18:35:47
    #38966732
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Akinamiksoft
Код: sql
1.
SELECT MIN(name)

Так - да.Это только для детерминированности результата и соответствия синтаксису SQL. На "Так он получит 2 записи с ПГ и ни одной с ПО" это никак не влияет.
...
Рейтинг: 0 / 0
22.05.2015, 18:40:17
    #38966739
satanicman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Благодарю всех за помощь, особенно miksoft и lamer yuga
...
Рейтинг: 0 / 0
22.05.2015, 18:42:36
    #38966743
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
satanicmanБлагодарю всех за помощьПодождите, мы еще не закончили :)
А что должно происходить с записями у которых нет этих подстрок или есть они обе?
...
Рейтинг: 0 / 0
22.05.2015, 20:40:52
    #38966822
lamer yuga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Akinamiksoft
Код: sql
1.
SELECT MIN(name)


Так - да.Я, конечно, не безгрешен, однако и MIN здесь абсолютно ни при чем. Ну не требует MySQL аггрегатных функций для полей, не перечисленных в GROUP BY(если не указать запрет явно) - так что что MIN, что не MIN - все равно другие поля с этим значением коррелировать не обязаны

А вот список GROUP BY, напротив, задает разделение строк на группы со значениями 1 или 2 для каждого ID, что и возжелалось ТСу

Так что, извините, но мимо как раз ваше замечание ;-)
...
Рейтинг: 0 / 0
22.05.2015, 20:45:28
    #38966826
lamer yuga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
Или группы 0/1 - в варианте mikesoft, сути не меняет ;)
...
Рейтинг: 0 / 0
22.05.2015, 21:10:52
    #38966834
lamer yuga
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать выборку из БД
miksoft
Код: sql
1.
2.
3.
4.
SELECT MIN(name)
FROM mytable
WHERE name REGEXP 'П[ОГ]'
GROUP BY external_id, name like '%ПГ%'

я бы немного расширил:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT t.*
FROM mytable t
JOIN(
  SELECT MAX(id)id
  FROM mytable
  WHERE name REGEXP 'П[ОГ]'
  GROUP BY external_id, name like '%ПГ%'
  )g ON g.id=t.id;
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку из БД / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]