[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: MySQL Присвоить номер позиции и сохранить запись
Страницы: 1, 2
arbuzmaster
Подскажите пожалуйста, есть таблица например такого вида
newid position name
------- ---------- --------
1______0_____ телефон
2______1_____ телефон
3______0_____ авто
4______2_____ телефон
5______1_____ авто
6______3_____ авто
7______3_____ телефон
8______2_____ авто

можно ли одним запросом, посчитать номер позиции для определенного имени и добавить новую запись с last position + 1 то есть например
newid position name
------- ---------- --------
9______4_____ телефон
поле newid - AUTO_INCREMENT

или нужно сначала посчитать COUNT(*) а потом добавить число в position из COUNT (так как у меня счет идет от нуля)?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
insert into `table_name`(position,`name`)
select
max(position)+1,name
from `table_name` t
where
`name` = 'телефон'
arbuzmaster
Цитата (redreem @ 14.05.2016 - 16:11)
insert into `table_name`(position,`name`)
select
max(position)+1,name
from `table_name` t
where
`name` = 'телефон'

Спасибо - хорошо работает для уже существующих записей, но вот при создании новой с position все нормально, а name не присваивается!

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
arbuzmaster
Что то я ни как ни вкурю как это вставить в запрос
IF `name` ='' THEN  SET `name` ='$value'


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
arbuzmaster
INSERT INTO `scenes`(`position`, `name`) SELECT max(`position`)+1,IF(`name`=''  OR `name` IS NULL ,'test2',`name`)AS `name` FROM `scenes` t WHERE `name` = 'test2'
Вот так условие принимается по синтаксису, но значение не устанавливается ?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
ну естественно при создании новой нейму не от куда взяться.
arbuzmaster
Ну так в условии то я прописал - присвоить новое значение, а оно не присваивается почему-то? Может условие как то подправить?


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
insert into `table_name`(position,`name`)
select
case
when
name is null then 'qwe1'
else tt.`name`
end,
case
when
name is null then 1
else tt.pos
end name
from (
select
max(position)+1 pos, name
from `table_name` t
where
`name` = 'qwe1'
) tt



qwe1 - это name записи
arbuzmaster
я немного поковырял Ваш код

insert into `scenes`(`position`,`name_of_scene`)
select
case
when
`name_of_scene` is null then 'qwe1'
else tt.`name_of_scene`
end,
case
when
`name_of_scene` is null then 1
else tt.pos
end `name_of_scene`
from (
select
max(`position`)+1 pos, `name_of_scene`
from `scenes` t
where `name_of_scene` = 'qwe1'
) tt

может где ошибку допустил, но он не работает, а что значит t и tt. ?

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
arbuzmaster
При отсутствии name создается пустая ячейка, а при наличии в таблице name='qwe1' в position пишется 0 а в name 1

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
а может ты включишь мозг и сделаешь сам?
arbuzmaster
Сделать то я конечно сделаю, просто хотелось знать как правильно это сделать!

_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
так сделай, выложи вариант - там уже посмотрим.
arbuzmaster
Получилось вот так:

INSERT INTO `scenes`(`position`, `name`)
SELECT max(`position`)+1,
IF(`name` IS NULL,'$variable','$variable')AS `name`
FROM `scenes` WHERE `name` = '$variable'


_____________
Мой первый сайтик

Посмотри на свой XBMC под другим углом
redreem
ну если работает, то в чем вопрос? smile.gif
типа position у тебя получается null+1 = 1?
лучше все-таки контролировать такие вещи явно.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.