Змінюй хід війни! Допомагай ЗСУ!

php and mysql

Статус: Офлайн
Реєстрація: 04.07.2008
Повідом.: 677
Сегодня уже голову сломал над одной задачкой, если кто может то дайте свет в конце туннеля)))
Есть в таблице поле model.
В нем хранятся цифры типа : 6,5,45,99,2
Каждая такая цифра обозначает id машины.
Если пользователь выбирает все марки ауди тогда по алгоритму специальному показываются все машины ауди например это 45 и 99.
Когда пользователь добавляет машину тогда делается запрос типа:
PHP:
  mysql_query("UPDATE `users` set model=CONCAT_WS(',',model,'$_POST[SelModels]') where id='$id' and login='$login' and model not like '$_POST[SelModels]'");
Но проблема вот в чем что в поле не могут быть данные которые повторяются через запятую например: 1,14,14,17,14,14,15,17
Тут должно быть одно число уникальное через запятую:
то есть правильно вот так 1,14,15,17
Как правильно тогда добавлять вот эти циферки чтобы было удобнее проверять на их наличие в поле?Вытаскивать в массив и проверять с входным значением?Либо посредством мускула?
Пытался делать так : if (!in_array($_POST['SelModels'], $finish['model']))
где $finish['model'] это число взятое из запроса после запятой.
Но почему то тоже не работает :(
 
когда ж ты уже прочтешь что-нибудь по теории РСУБД?
ну блин второй жеж раз на те же грабли.
 
Ну может кто нибудь подскажет, а ?
В этой задаче нельзя создавать несколько таблиц, так бы я уже создал бы отдельно model и по ид - шнику юзера вытаскивал бы цифры.
Но к сожалению, задача была поставлена как описано выше...
Как лучше всего быть?
 
Ну может кто нибудь подскажет, а ?
В этой задаче нельзя создавать несколько таблиц, так бы я уже создал бы отдельно model и по ид - шнику юзера вытаскивал бы цифры.
Но к сожалению, задача была поставлена как описано выше...
Как лучше всего быть?

0.
Код:
UPDATE `users` 
   set model=CONCAT_WS(',',model,'$_POST[SelModels]') 
 where id='$id' 
   and login='$login' 
   and CONCAT(',',model,',') not like ',$_POST[SelModels],'

С MySQL не работал вообще, просто глянул справку по функциям конкатенации.

1. Развернуть чертёж и перестать строить дом вверх тормашками. Что мешает нормализовать схему, вынеся поле model в отдельную таблицу user_models?
 
Что мешает нормализовать схему, вынеся поле model в отдельную таблицу user_models?

яйца

Как лучше всего быть?

stepqa.jpg
 
Останнє редагування:
с твоей реализацией проще все хранить в файле. база такого мазохизма не стерпит.

---------------------
user
---------------------
id
...

---------------------
model
---------------------
id
...

---------------------
user_model_assign
---------------------
id
user_id
model_id

или это так трудно?
 
0.
Код:
UPDATE `users` 
   set model=CONCAT_WS(',',model,'$_POST[SelModels]') 
 where id='$id' 
   and login='$login' 
   and CONCAT(',',model,',') not like ',$_POST[SelModels],'

С MySQL не работал вообще, просто глянул справку по функциям конкатенации.

1. Развернуть чертёж и перестать строить дом вверх тормашками. Что мешает нормализовать схему, вынеся поле model в отдельную таблицу user_models?

Все равно повторяются. . . .
Например у меня в поле: 6,4,8,48
Я добавляю 50.
У меня получается 6,6,4,4,8,8,48,48,50
:((
Нужно только одну таблицу сделать! (Условие такое)
 
Все равно повторяются. . . .
Например у меня в поле: 6,4,8,48
Я добавляю 50.
У меня получается 6,6,4,4,8,8,48,48,50
:((

А зачем вообще конкатенация? Я так понимаю, на страницу передаются выбранные модели, обратно передаются они же +/- изменения. На странице два раза одну модель всё равно не выберешь.
Код:
UPDATE `users` 
   SET model = '$_POST[SelModels]' 
 WHERE id='$id' AND login='$login' 
-- Ещё не помешало бы условие для проверки, а не случилось ли у нас потерянных изменений
И выполнять этот апдейт, когда старые данные отличаются от новых, чтобы БД лишний раз не дёргать.

PS: Я не знаю, кто Вас там просит сделать так, но Ваша схема данных не нормализована. Если это учёба, то Вас учат неправильному. Если это заказ, то заказчики как правило до физической модели БД не опускаются в ТЗ, так что количество таблиц их не волнует. Если это приказ сверху, то ищите бейджик с надписью "Стажёр-ассенизатор".
 
Ну так что с конкатенацией никто не поможет?
 
ну раз хочется бдсм, то:
implode('', array_map(function($var){return '(' . $var . ')';}, array_unique($arr)));
искать лайком.

но за такое в продакшене надо карать паяльником анально =)
 
Мне нужно чтобы было через мускул, не используя рнр
 
>Мне нужно чтобы было через мускул, не используя рнр
может еще и без apache? ;-) и разве mysql_query и $_POST в первом посте - это не php?
 
Аххаа)))Я имею виду чтобы конкатенация выполнялась на мускуле))
 
Так я и использую ее, только что то ничего не выходит(
 
Назад
Зверху Знизу