Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL Структура If -> ElseIf -> Else / 19 сообщений из 19, страница 1 из 1
24.12.2013, 22:37:53
    #38511585
MySQL Структура If -> ElseIf -> Else
Имеется таблица 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
24.12.2013, 23:08:07
    #38511601
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
...
Рейтинг: 0 / 0
24.12.2013, 23:54:46
    #38511619
MySQL Структура If -> ElseIf -> Else
Немного не понял к чему тут это ссылка

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

Код: 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
25.12.2013, 00:12:00
    #38511629
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
А подумать?

Как я понимаю, тебе нужна вторая запись при сортировке по выражению
Код: 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
25.12.2013, 00:47:56
    #38511651
MySQL Структура If -> ElseIf -> Else
авторКак я понимаю, тебе нужна вторая запись при сортировке по выражениюНе второй записи а второй колонки

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


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


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


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

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



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


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

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

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


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

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


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



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

Код: 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
25.12.2013, 13:46:10
    #38512094
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
miksoft, ТСу нужна вторая строка. Причём непонятно, что делать, если под условие №1 одна строка подходит - брать по условию №2 первую или вторую...
...
Рейтинг: 0 / 0
25.12.2013, 13:48:25
    #38512098
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
tanglirmiksoft, ТСу нужна вторая строка.Николай ЖуковНе второй записи а второй колонки
...
Рейтинг: 0 / 0
25.12.2013, 13:52:25
    #38512110
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
miksoft, проглядел. Но его это 15342726 не устроило, а ваш вариант аналогичен тому...
...
Рейтинг: 0 / 0
25.12.2013, 13:59:17
    #38512124
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
tanglirmiksoft, проглядел. Но его это 15342726 не устроилоНе вижу "не устроило", вижу только повторение исходного условия.
tanglir, а ваш вариант аналогичен тому...ну да, у меня только запись покороче.
...
Рейтинг: 0 / 0
25.12.2013, 14:21:55
    #38512161
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
Код: 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
25.12.2013, 22:02:00
    #38512569
MySQL Структура If -> ElseIf -> Else
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
25.12.2013, 22:22:41
    #38512585
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MySQL Структура If -> ElseIf -> Else
Николай Жуковпервая строка в данной таблице.В таблице не существует "первой строки". В таблице вообще нет порядка записей, это куча.
...
Рейтинг: 0 / 0
25.12.2013, 22:39:45
    #38512596
MySQL Структура If -> ElseIf -> Else
miksoft,

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

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


Код: 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
26.12.2013, 00:29:17
    #38512682
MySQL Структура If -> ElseIf -> Else
Вообщем дошло до меня

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


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