BG Development


  Reply to this topicStart new topicStart Poll

> Mysql IF ELSE
runtime
Публикувано на: 02-03-2020, 08:40
Quote Post



Име: Вальо
Група: Потребител
Ранг: Новопостъпил

Мнения: 46
Регистриран на: 22.06.07



Здравейте,

Мъча се да изкарам запис от базата базиран на дадено условие но нещо зациклих.

Структурата е:
CODE


| id | status | v_id | is_first |
 1      100     11       null
 2      100     11        1
 3      100     11       null
 4      100     11       null



Условието е да се извади ID на първият запис ако is_first няма флаг 1 в нито един запис или ID на записа с флага. В конкретният случай трябва да ми върне ID=2. Ако няма нито един флаг да върне ID=1

Ако ни трябва ID на първия запис, то лесно с:

CODE

select
MIN(id)
from logs
where (status = 100 and v_id = 11)


Пробвах с IF ELSE, CASE, ISNULL ама нещо удрям на греда, а съм сигурен, че проблема е в моята тиква.

EDIT: Вариант ми е да ги сортирам по is_first и да лимитирам записа до 1-вия
order by is_first desc limit 1
ама ми се иска да потърся друг вариант. icon_smile.gif

Това мнение е било редактирано от runtime на 02-03-2020, 08:47
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 02-03-2020, 08:46
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3564
Регистриран на: 21.02.18



QUOTE
да се извади ID на първият запис ако is_first няма флаг 1 в нито един запис или ID на записа с флага
я разяснии какво питаш, защото това няма смисъл,

1. Каво означава "първи" запис. Записите в базата нямат подредба, така че понятия като първи, втори, последен нямат смисъл без да кажеш по какъв критерии трябва да се подредят

2. Какво означава "в нито един запис " ?
3. Какво означава " ID на записа с флага" ?


--------------------
https://ncase.me/trust-bg/
---
Misanthropy is the general hatred, dislike, distrust or contempt of the human species or human nature. A misanthrope or misanthropist is someone who holds such views or feelings.
---
INTJ’s are good at being very good at everything
---
I have a problem. Let's use Microservices! Now I have 13 distributed problems.
PMEmail PosterUsers Website
Top
thrawn
Публикувано на: 02-03-2020, 08:50
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2790
Регистриран на: 17.01.17



Сортираш в низходящ ред по is_first и по възходящ по id и взимаш първия запис. Друг е въпроса какво точно се опитваш да постигнеш.
PMEmail Poster
Top
runtime
Публикувано на: 02-03-2020, 08:54
Quote Post



Име: Вальо
Група: Потребител
Ранг: Новопостъпил

Мнения: 46
Регистриран на: 22.06.07



да се извади ID на първият запис ако is_first няма флаг 1 в нито един запис или ID на записа с флага
ID - primary key

Каво означава "първи" запис.
Критерия на подрежданне е по is_first

Какво означава "в нито един запис " ?
във вички записи в колоната is_first да са с null стойности в които записите в колоната status са 100 и записите в колоната v_id са 11


Какво означава " ID на записа с флага" ?
ID е колона с първичният ключ

Извинявай ама, кое точно не се разбра?
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 02-03-2020, 09:17
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 3564
Регистриран на: 21.02.18



QUOTE (runtime @ 02-03-2020, 08:54)
да се извади ID на първият запис ако is_first няма флаг 1 в нито един запис или ID на записа с флага
ID - primary key

Каво означава "първи" запис. 
Критерия на подрежданне е по is_first

Какво означава "в нито един запис " ?
във вички записи в колоната is_first да са с null стойности в които записите в колоната status са 100 и записите в колоната v_id са 11


Какво означава " ID на записа с флага" ?
ID е колона с първичният ключ

Извинявай ама, кое точно не се разбра?

продължавам нищо да не разбирам


QUOTE
Критерия на подрежданне е по is_first

Какво правим ако има няколко записа с не-нулл стойности за ис_фирст ? Ако ис_фирст е 2,3,4,5,6 ? как подреждаме тогава ?


QUOTE
да се извади ID на първият запис ако is_first няма флаг 1 в нито един запис или ID на записа с флага. В конкретният случай трябва да ми върне ID=2
Това противоречи на което ми кзваш по-горе. ИД=2 има не нулл ис_фирст, така че не трябва да ти връща него

QUOTE
ID е колона с първичният ключ

Това е ясно, аз питах какво означава " в нито един запис или ID на записа с флага"

Това мнение е било редактирано от Gamma Goblin на 02-03-2020, 09:18


--------------------
https://ncase.me/trust-bg/
---
Misanthropy is the general hatred, dislike, distrust or contempt of the human species or human nature. A misanthrope or misanthropist is someone who holds such views or feelings.
---
INTJ’s are good at being very good at everything
---
I have a problem. Let's use Microservices! Now I have 13 distributed problems.
PMEmail PosterUsers Website
Top
runtime
Публикувано на: 02-03-2020, 09:37
Quote Post



Име: Вальо
Група: Потребител
Ранг: Новопостъпил

Мнения: 46
Регистриран на: 22.06.07



Какво правим ако има няколко записа с не-нулл стойности за ис_фирст ? Ако ис_фирст е 2,3,4,5,6 ? как подреждаме тогава ?
Само един запи от колоната is_first има стойност 1, всички останали са null

в нито един запис или ID на записа с флага
Да изведа MIN(id) ако вички записи от колоната ис_фирст са NULL или ID-то на запиа в който в колоната ис_фирст има стойност 1.

В конкретния случай в таблицата по-горе трябва да се върне ID=2 защото is_firs не е null в някой от записите. Ако във всички записи в колоната беше null то да върне ID=1 защото това е записа с най-малко ID или MIN(id)

select id
from logs
where (status = 100 and v_id = 11)
order by is_first desc limit 1

@thrawn - мерси и аз така го направих

@Gamma Goblin заеби правя го със сортирането и лимитирането

Това мнение е било редактирано от runtime на 02-03-2020, 09:37
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0