powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL Структура If -> ElseIf -> Else
19 сообщений из 19, страница 1 из 1
MySQL Структура If -> ElseIf -> Else
    #38511585
Имеется таблица 2 колонки

Код: sql
1.
2.
3.
4.
5.
CREATE TABLE IF NOT EXISTS `_user_margin` (
  `spid` varchar(15) NOT NULL,
  `g0` int(11) NOT NULL DEFAULT '5',
  PRIMARY KEY (`spid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



Нужно получить результат второй по условию типа

Код: sql
1.
WHERE spid='P50'



Если совпадений нет то

Код: sql
1.
WHERE spid='S10'



И если совпадений тоже нет то

Код: sql
1.
WHERE spid=''
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511601
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511619
Немного не понял к чему тут это ссылка

У меня результат всего одна строка при любом условии

Код: sql
1.
SELECT g0 FROM `_user_margin` WHERE spid='P50' OR spid='S10' OR spid='' LIMIT 1



я конечно могу последний поиск
Код: sql
1.
WHERE spid=''

сделать не пустой а например
Код: sql
1.
WHERE spid='Z0'



Выполнить поиск Вот так

Код: sql
1.
SELECT g0 FROM `_user_margin` WHERE spid='P50' OR spid='S10' OR spid='Z0' ORDER BY spid ASC LIMIT 1



Но по умолчанию первая строка и таблице не Z0 как раз NULL а потом префиксы добавляются хаотически
И поэтому я найду сначала
Код: sql
1.
spid=''
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511629
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А подумать?

Как я понимаю, тебе нужна вторая запись при сортировке по выражению
Код: sql
1.
2.
3.
4.
5.
6.
CASE spid
WHEN 'P50' THEN 1
WHEN 'S10' THEN 2
WHEN ''    THEN 3
ELSE            4
END


Ссылка - в полный рост.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511651
авторКак я понимаю, тебе нужна вторая запись при сортировке по выражениюНе второй записи а второй колонки

По условию
Если
Код: sql
1.
spid='Pxx'


Если такой строки нет то
Код: sql
1.
spid='Sxx'


Если и такой строки нет то
Код: sql
1.
spid=NULL


вот что мне нужно и именно в таком порядке
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511706
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Акина правильную ссылку дал, читайте фак внимательно.
Николай Жуков
Код: sql
1.
spid=NULL

не будет работать
Николай ЖуковПо условию
Если
Код: sql
1.
spid='Pxx'



Если такой строки нет то
Код: sql
1.
spid='Sxx'


а если есть одна запись с spid='Pxx', то надо брать первую или вторую с spid='Sxx'?
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38511743
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirНиколай Жуков
Код: sql
1.
spid=NULL

не будет работатьЕсли точнее - то ВСЕГДА False.

Николай ЖуковНе второй записи а второй колонки
Код: sql
1.
SELECT g0


Николай ЖуковИ если совпадений тоже нет то

Код: sql
1.
WHERE spid=''


Николай ЖуковЕсли и такой строки нет то
Код: sql
1.
spid=NULL



Пора бы определиться, null или пустая строка. Это разные вещи.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512087
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуков,

Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM `_user_margin`
WHERE spid='P50' OR spid='S10' OR spid=''
ORDER BY spid='P50' DESC, spid='S10' DESC
LIMIT 1
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512094
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, ТСу нужна вторая строка. Причём непонятно, что делать, если под условие №1 одна строка подходит - брать по условию №2 первую или вторую...
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512098
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoft, ТСу нужна вторая строка.Николай ЖуковНе второй записи а второй колонки
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512110
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, проглядел. Но его это 15342726 не устроило, а ваш вариант аналогичен тому...
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512124
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoft, проглядел. Но его это 15342726 не устроилоНе вижу "не устроило", вижу только повторение исходного условия.
tanglir, а ваш вариант аналогичен тому...ну да, у меня только запись покороче.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512161
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT g0 FROM `_user_margin` 
WHERE spid=
  CASE(
    SELECT MIN(FIELD(spid,'P50','S10',''))
    FROM `_user_margin`
    WHERE spid IN ('P50', 'S10', '')
    )
  WHEN 1 THEN 'P50' 
  WHEN 2 THEN 'S10' 
  WHEN 3 THEN '' 
  ELSE NULL -- если не было строк с 'P50', 'S10' или ''
  END
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512569
Cygapb-007
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT g0 FROM `_user_margin` 
WHERE spid=
  CASE(
    SELECT MIN(FIELD(spid,'P50','S10',''))
    FROM `_user_margin`
    WHERE spid IN ('P50', 'S10', '')
    )
  WHEN 1 THEN 'P50' 
  WHEN 2 THEN 'S10' 
  WHEN 3 THEN '' 
  END



Все работает.
Удалил ELSE так как писал что spid='' это первая строка в данной таблице.
Но есть одна проблема.
Этот фрагмент только часть запроса а тут надо в три места выбрать одни и те же параметры
Можно его как то упростить до указания spid значений в одном месте.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512585
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуковпервая строка в данной таблице.В таблице не существует "первой строки". В таблице вообще нет порядка записей, это куча.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512596
miksoft,

Конкретно в данном случае она с ней создается изначально.
Но замечание понял.
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512598
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуковв данном случае она с ней создается изначально.Это видимость. Особенно в случае "Этот фрагмент только часть запроса".
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512626
Извините если сразу сбил с толку кого то

Сейчас это работает вот с такими таблицами


Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
CREATE TABLE IF NOT EXISTS `_num` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `groups` int(11) NOT NULL,
  `price` decimal(10,2) NOT NULL DEFAULT '0.00',
  `service` tinyint(1) NOT NULL DEFAULT '0',
  `info` text COLLATE utf8_unicode_ci NOT NULL,
  `weight` decimal(10,3) NOT NULL DEFAULT '0.000',
  `length` decimal(10,3) NOT NULL DEFAULT '0.000',
  `width` decimal(10,3) NOT NULL DEFAULT '0.000',
  `depth` decimal(10,3) NOT NULL DEFAULT '0.000',
  `visible` tinyint(1) NOT NULL DEFAULT '1',
  `new` tinyint(1) NOT NULL DEFAULT '0',
  `free_shiping` tinyint(1) NOT NULL DEFAULT '0',
  `small_foto` text COLLATE utf8_unicode_ci NOT NULL,
  `big_fotos` text COLLATE utf8_unicode_ci NOT NULL,
  `unit` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `groups` (`groups`),
  KEY `visible` (`visible`),
  KEY `service` (`service`),
  KEY `price` (`price`),
  KEY `new` (`new`),
  KEY `free_shiping` (`free_shiping`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2500033 ;

--
-- Дамп данных таблицы `_num`
--

INSERT INTO `_num` (`id`, `groups`, `price`, `service`, `info`, `weight`, `length`, `width`, `depth`, `visible`, `new`, `free_shiping`, `small_foto`, `big_fotos`, `unit`) VALUES
(2500011, 29, '198.50', 0, 'info', '1.200', '1.050', '2.010', '0.500', 1, 0, 0, 'D:\\Dropbox\\Warehouse.NET\\Warehouse.NET\\bin\\Debug\\images\\product_20131117214036.JPG', 'D:\\Dropbox\\Warehouse.NET\\Warehouse.NET\\bin\\Debug\\images\\2012-06-02 18.18.50.JPG|D:\\Dropbox\\Warehouse.NET\\Warehouse.NET\\bin\\Debug\\images\\2012-06-02 18.19.07.JPG|D:\\Dropbox\\Warehouse.NET\\Warehouse.NET\\bin\\Debug\\images\\prod_gall_20131117213719.JPG', 1),
(2500026, 25, '190.00', 0, '', '0.000', '0.000', '0.000', '0.000', 1, 0, 0, '', '', 1),
(2500030, 25, '100.00', 0, '', '0.000', '0.000', '0.000', '0.000', 1, 0, 0, '', '', 1);

-- --------------------------------------------------------

--
-- Структура таблицы `_num_lang`
--

CREATE TABLE IF NOT EXISTS `_num_lang` (
  `id` bigint(20) NOT NULL,
  `title` text COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `site` text COLLATE utf8_unicode_ci NOT NULL,
  `lang` int(11) NOT NULL,
  KEY `id` (`id`),
  KEY `lang` (`lang`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `_num_lang`
--

INSERT INTO `_num_lang` (`id`, `title`, `description`, `site`, `lang`) VALUES
(2500011, 'ru', 'rus', 'russian', 1),
(2500011, 'ua', 'ukr', 'ukaine', 2),
(2500011, 'en', 'eng', 'english', 3),
(2500026, '2', '', '', 1),
(2500026, '2', '', '', 2),
(2500026, '2', '', '', 3),
(2500030, 'testtdmjksvbckjedlbclelbcl', '', '', 3),
(2500030, 'testtdmjksvbckjedlbclelbcl', '', '', 2),
(2500030, 'testtdmjksvbckjedlbclelbclxvdcbfnbgnmhmhj,mhjm', '', '', 1);

-- --------------------------------------------------------

--
-- Структура таблицы `_num_qty`
--

CREATE TABLE IF NOT EXISTS `_num_qty` (
  `id` int(11) NOT NULL,
  `storage_1` decimal(10,3) NOT NULL DEFAULT '0.000',
  `reserve_1` decimal(10,3) NOT NULL DEFAULT '0.000',
  `storage_2` decimal(10,3) NOT NULL DEFAULT '0.000',
  `reserve_2` decimal(10,3) NOT NULL DEFAULT '0.000',
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Дамп данных таблицы `_num_qty`
--

INSERT INTO `_num_qty` (`id`, `storage_1`, `reserve_1`, `storage_2`, `reserve_2`) VALUES
(2500011, '3.000', '2.000', '0.000', '0.000'),
(2500026, '7.000', '1.000', '4.000', '1.000'),
(2500030, '0.000', '0.000', '0.000', '0.000');

-- --------------------------------------------------------

--
-- Структура таблицы `_user_margin2`
--

CREATE TABLE IF NOT EXISTS `_user_margin2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sid` int(11) DEFAULT '-1',
  `pid` int(11) DEFAULT '-1',
  `g0` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `sid` (`sid`),
  KEY `pid` (`pid`),
  KEY `g0` (`g0`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Дамп данных таблицы `_user_margin2`
--

INSERT INTO `_user_margin2` (`id`, `sid`, `pid`, `g0`) VALUES
(2, -1, -1, 5),
(3, 25, -1, 6),
(4, -1, 2500026, 7);



Для таблиц _num_qty и _user_margin2 поля storage_X,reserve_X,gX являются добавляемыми в процессе работы с базой

Обрабатывается примерно вот таким запросом

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT q.*,n.service,n.price,l.title,l.description,l.lang,m1.g0 AS pid,m2.g0 AS sid,m3.g0 AS noid FROM _num AS n 
LEFT JOIN _num_lang AS l ON n.id=l.id 
LEFT JOIN _num_qty AS q ON n.id=q.id
LEFT JOIN _user_margin2 AS m1 ON m1.pid=q.id 
LEFT JOIN _user_margin2 AS m2 ON m2.sid=n.groups
LEFT JOIN _user_margin2 AS m3 ON m3.sid='-1' AND m3.pid='-1'
WHERE n.groups='25' AND l.lang='1' ORDER BY n.id DESC



И выводит pid,sid,noid для всех пунктов


Хочу получить результат всего 1 для каждой строки результата (например margin) вместо трех (pid,sid,noid)
То есть вместо
Код: sql
1.
m1.g0 AS pid,m2.g0 AS sid,m3.g0 AS noid


margin РАВЕН (ЕСЛИ m1.pid НЕ РАВЕН NULL ТОГДА m1.g0) ИНАЧЕ (ЕСЛИ m2.sid НЕ РАВЕН NULL ТОГДА m2.g0) ИНАЧЕ (m3.g0)
Просто не знаю как это написать
...
Рейтинг: 0 / 0
MySQL Структура If -> ElseIf -> Else
    #38512682
Вообщем дошло до меня

Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT q.*,n.service,n.price,l.title,l.description,l.lang,if(m1.g0 IS NOT NULL , m1.g0, if(m2.g0 IS NOT NULL,m2.g0,m3.g0)) AS margin FROM _num AS n 
LEFT JOIN _num_lang AS l ON n.id=l.id 
LEFT JOIN _num_qty AS q ON n.id=q.id
LEFT JOIN _user_margin2 AS m1 ON m1.pid=q.id 
LEFT JOIN _user_margin2 AS m2 ON m2.sid=n.groups
LEFT JOIN _user_margin2 AS m3 ON m3.sid='-1' AND m3.pid='-1'
WHERE n.groups='25' AND l.lang='1' ORDER BY n.id DESC



Возможно можно было проще
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL Структура If -> ElseIf -> Else
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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