powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод 2 одинаковых строк
12 сообщений из 12, страница 1 из 1
Вывод 2 одинаковых строк
    #39433367
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не могу сообразить как из таблицы можно вывести 2 одинаковые строки.
Например, есть запрос

SELECT ID, NAME
FROM b_iblock_element
WHERE ID IN (125138, 125138)

Как при таком запросе получить 2 строки? Иначе говоря, если у меня 2 повторяющихся ид, то мне нужно получить 2-е строки, а не одну. Реально ли это сделать?
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433372
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT ID, NAME
FROM b_iblock_element, (SELECT 1 UNION SELECT 2) dummy
WHERE ID IN (125138, 125138)
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433452
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, спасибо, поняла в какую сторону копать.
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433516
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, так то все легко и понятно. Но вот не соображу как модифицировать готовый запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
SELECT DISTINCT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.CODE as CODE,BE.NAME as NAME,BE.ACTIVE as ACTIVE
FROM b_iblock B 
INNER JOIN b_lang L ON B.LID=L.LID 
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID 
LEFT JOIN b_iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND FP0.CODE='NEW' 
LEFT JOIN b_iblock_property FP1 ON FP1.IBLOCK_ID = B.ID AND FP1.CODE='MINIMUM_PRICE' 
LEFT JOIN b_iblock_element_property FPV0 ON FPV0.IBLOCK_PROPERTY_ID = FP0.ID AND FPV0.IBLOCK_ELEMENT_ID = BE.ID 
LEFT JOIN b_iblock_element_property FPV1 ON FPV1.IBLOCK_PROPERTY_ID = FP1.ID AND FPV1.IBLOCK_ELEMENT_ID = BE.ID 
LEFT JOIN b_iblock_property_enum FPEN0 ON FPEN0.PROPERTY_ID = FPV0.IBLOCK_PROPERTY_ID AND FPV0.VALUE_ENUM = FPEN0.ID 
INNER JOIN ( SELECT DISTINCT BSE.IBLOCK_ELEMENT_ID FROM b_iblock_section_element BSE INNER JOIN b_iblock_section BSubS ON BSE.IBLOCK_SECTION_ID = BSubS.ID INNER JOIN b_iblock_section BS ON (BSubS.IBLOCK_ID=BS.IBLOCK_ID AND BSubS.LEFT_MARGIN>=BS.LEFT_MARGIN AND BSubS.RIGHT_MARGIN<=BS.RIGHT_MARGIN) WHERE ((BS.ID IN (180))) ) BES ON BES.IBLOCK_ELEMENT_ID = BE.ID 
left join b_catalog_product CAT_PR on (CAT_PR.ID = BE.ID) 
left join b_catalog_iblock CAT_IB on ((CAT_PR.VAT_ID IS NULL OR CAT_PR.VAT_ID = 0) AND CAT_IB.IBLOCK_ID = BE.IBLOCK_ID) 
left join b_catalog_vat CAT_VAT on (CAT_VAT.ID = IF((CAT_PR.VAT_ID IS NULL OR CAT_PR.VAT_ID = 0), CAT_IB.VAT_ID, CAT_PR.VAT_ID))
WHERE 1=1 AND (
 (
 ((BE.ID IN ('125138', '125138', '125139', '125139', '125147')))
 ) AND (EXISTS ( SELECT IBLOCK_ID FROM b_iblock_site WHERE IBLOCK_ID = B.ID AND (((SITE_ID='s1'))) )) 
 AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) 
 AND ((((BE.ACTIVE='Y')))) AND ((((CAT_PR.AVAILABLE='Y')))) AND ((((BE.IBLOCK_ID = '15')))) ) 
AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) 
ORDER BY length(FPEN0.VALUE)>0 desc, FPEN0.VALUE asc ,FPV1.VALUE_NUM desc



По поводу кода - он не мой. Нужна его модификация, а не переписывание с нуля по феншую. Т.к. он собирается из условий.
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433543
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот это условие:
Код: sql
1.
(BE.ID IN ('125138', '125138', '125139', '125139', '125147'))

по которому. как я понимаю, и нужны дубликаты - оно собсно откуда? и насколько оно, да и весь запрос, модификационно пригодны?

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

Первая - просто преобразованный список,причём преобразованный из набора в формат значение-количество. Т.е. в данном конкретном случае это нечто вроде
Код: sql
1.
2.
3.
SELECT 125138, 2 UNION ALL
SELECT 125139, 2 UNION ALL
SELECT 125147, 1



Ну а вторая - это генератор непрерывных значений в количестве не меньшем, чем максимальный COUNT из первой таблицы. Ну типа
Код: sql
1.
2.
3.
4.
5.
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5



И соответственно они обе добавляются в секцию FROM запроса:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
SELECT DISTINCT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.CODE as CODE,BE.NAME as NAME,BE.ACTIVE as ACTIVE
FROM b_iblock B 
INNER JOIN b_lang L ON B.LID=L.LID 
INNER JOIN b_iblock_element BE ON BE.IBLOCK_ID = B.ID 
LEFT JOIN b_iblock_property FP0 ON FP0.IBLOCK_ID = B.ID AND FP0.CODE='NEW' 
LEFT JOIN b_iblock_property FP1 ON FP1.IBLOCK_ID = B.ID AND FP1.CODE='MINIMUM_PRICE' 
LEFT JOIN b_iblock_element_property FPV0 ON FPV0.IBLOCK_PROPERTY_ID = FP0.ID AND FPV0.IBLOCK_ELEMENT_ID = BE.ID 
LEFT JOIN b_iblock_element_property FPV1 ON FPV1.IBLOCK_PROPERTY_ID = FP1.ID AND FPV1.IBLOCK_ELEMENT_ID = BE.ID 
LEFT JOIN b_iblock_property_enum FPEN0 ON FPEN0.PROPERTY_ID = FPV0.IBLOCK_PROPERTY_ID AND FPV0.VALUE_ENUM = FPEN0.ID 
INNER JOIN ( SELECT DISTINCT BSE.IBLOCK_ELEMENT_ID FROM b_iblock_section_element BSE INNER JOIN b_iblock_section BSubS ON BSE.IBLOCK_SECTION_ID = BSubS.ID INNER JOIN b_iblock_section BS ON (BSubS.IBLOCK_ID=BS.IBLOCK_ID AND BSubS.LEFT_MARGIN>=BS.LEFT_MARGIN AND BSubS.RIGHT_MARGIN<=BS.RIGHT_MARGIN) WHERE ((BS.ID IN (180))) ) BES ON BES.IBLOCK_ELEMENT_ID = BE.ID 
left join b_catalog_product CAT_PR on (CAT_PR.ID = BE.ID) 
left join b_catalog_iblock CAT_IB on ((CAT_PR.VAT_ID IS NULL OR CAT_PR.VAT_ID = 0) AND CAT_IB.IBLOCK_ID = BE.IBLOCK_ID) 
left join b_catalog_vat CAT_VAT on (CAT_VAT.ID = IF((CAT_PR.VAT_ID IS NULL OR CAT_PR.VAT_ID = 0), CAT_IB.VAT_ID, CAT_PR.VAT_ID))

-- дополнительные таблицы начало

INNER JOIN (SELECT 125138 value, 2 count UNION ALL
            SELECT 125139      , 2       UNION ALL
            SELECT 125147      , 1 ) dummy1 
      ON BE.ID = dummy1.value
INNER JOIN (SELECT 1 count UNION ALL
            SELECT 2       UNION ALL
            SELECT 3       UNION ALL          
            SELECT 4       UNION ALL
            SELECT 5 ) dummy2 
      ON dummy2.count <= dummy1.count

-- дополнительные таблицы конец

WHERE 1=1 AND (
 (
 ((BE.ID IN ('125138', '125138', '125139', '125139', '125147')))
 ) AND (EXISTS ( SELECT IBLOCK_ID FROM b_iblock_site WHERE IBLOCK_ID = B.ID AND (((SITE_ID='s1'))) )) 
 AND (((BE.ACTIVE_TO >= now() OR BE.ACTIVE_TO IS NULL) AND (BE.ACTIVE_FROM <= now() OR BE.ACTIVE_FROM IS NULL))) 
 AND ((((BE.ACTIVE='Y')))) AND ((((CAT_PR.AVAILABLE='Y')))) AND ((((BE.IBLOCK_ID = '15')))) ) 
AND (((BE.WF_STATUS_ID=1 AND BE.WF_PARENT_ELEMENT_ID IS NULL))) 
ORDER BY length(FPEN0.VALUE)>0 desc, FPEN0.VALUE asc ,FPV1.VALUE_NUM desc
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433546
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, после такой модификации само условие
Код: sql
1.
(BE.ID IN ('125138', '125138', '125139', '125139', '125147'))

уже можно выбросить, оно лишнее.
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433552
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, ошибки не выдает, но и не задваивает строки https://yadi.sk/i/GXoXELMH3GgVyf
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433553
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaДа, кстати, после такой модификации само условие
Код: sql
1.
(BE.ID IN ('125138', '125138', '125139', '125139', '125147'))

уже можно выбросить, оно лишнее.
Не уберается просто так. Выдает ошибку
Ошибка в запросe (1064): Syntax error near 'SELECT DISTINCT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.CODE as CODE,BE.NAME as' at line 2
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433579
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kimisaошибки не выдает, но и не задваивает строки
Блин... DISTINCT фтопку! ну как с ним могут быть дубликаты, ё моё? проглядел... либо добавить в выходной набор поле dummy2.count
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433581
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А kimisa
Код: sql
1.
Syntax error near 'SELECT DISTINCT BE.ID as ID,BE.IBLOCK_ID as IBLOCK_ID,BE.CODE as CODE,BE.NAME as' at line 2

вообще не от добавления - это сторонний косяк. Ибо текст запроса цитируется именно с того байта, на котором возникла проблема. А если этот байт неотображаемый - то соответственно будет цитата с первого отображаемого после проблемы.
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433657
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, убрала DISTINCT, результат тот же
...
Рейтинг: 0 / 0
Вывод 2 одинаковых строк
    #39433763
kimisa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, а нет, я не права. теперь все в порядке. Большое спасибо!!!!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод 2 одинаковых строк
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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