Змінюй хід війни! Допомагай ЗСУ!
  • Знижка на баннерну рекламу 30%! Банер на всіх сторінках сайту, в мобільній та десктопній версії за 14 тис. грн на місяць. Статистика сайту. Контакт: kharkovforum.com@gmail.com

php and mysql

С мускулем знаком мало, позвольте выразить общую мысль :) Именно свет в конце туннеля..

Если уж так надо хранить хешсеты - можно их хранить в виде ',0,56,3,4,' ? Или искусственно дописывать перед проверкой запятую слева-справа, чтобы всегда любое число было окружено запятыми?

Тогда наличие числа можно поймать с помощью FIND_IN_SET(model, ',3,')

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


А вставлять новое число - просто дописывать его в строку и запятую после него.
 
С мускулем знаком мало, позвольте выразить общую мысль :) Именно свет в конце туннеля..

Если уж так надо хранить хешсеты - можно их хранить в виде ',0,56,3,4,' ? Или искусственно дописывать перед проверкой запятую слева-справа, чтобы всегда любое число было окружено запятыми?

Тогда наличие числа можно поймать с помощью FIND_IN_SET(model, ',3,')

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


А вставлять новое число - просто дописывать его в строку и запятую после него.
Я так и делаю только без файнд_ин_сет
Привожу код без безопастности :)
Код вставки в поле:
PHP:
<?
 $outta= mysql_query("select model from `users`  where id='$id' and login='$login'");
			 if (mysql_num_rows($outta) != 0) {
			  while ($finish = mysql_fetch_assoc($outta)) {
			    $token = strtok($finish['model'], ",");
				 
					if (!in_array($_POST['SelModels'], $finish['model'])) { 
					   mysql_query("UPDATE `users` 
   set model= '$_POST[SelModels]'  
 where id='$id' 
   and login='$login' 
    ");
				 
				
			  }
		
			 }
?>
 
Поставил Navicat, попробовал добавить число конкретному юзеру, у которого его еще нет.

Код:
update users
set model = concat( model, '67:' )
where ( locate(':67:', model) = 0 ) and ( login = 'boo' )

В таблице users до запроса в поле model было
Код:
:1:

Стало
Код:
:1:67:

Второй раз выполнил запрос - 0 rows affected, т.е. дубликатов не будет.

Оно?

Если критично с запятыми, и чтобы вначале-конце их не было, можно так:

Код:
update users
set model = trim( both ',' from concat( model, ',67' ) )
where ( locate(',67,',  concat(',',  model, ',' ) ) = 0 ) and ( login = 'boo' )
 
А что такое locate(),как она работает? все работает к удивлению)))Супер, спасибо))
 
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


Просто ищет последовательность символов (подстроку) в строке. Если находит - возвращает индекс первого символа (минимум 1). Если нет - 0.

Не за что, обращайся :)
 
я бы сделал на РНР так...

сначала получаем модели из базы str = (select models from ....)
потом строку преобразуем в массив models2 = explode (',',$str);
переделываем массив foreach ($models as $m) $models[$m] = $m;
добавляем новые данные в массив $models[14]=14;
а потом делаем из массива строку - $models = implode (',', $models);

как лучше - не знаю. так РНР не оч сильно загрузится. если делать таблицу типа id_user int, id_model int
то многовато строк будет. в принципе, мускл с запросами в такие таблицы не очень тормозит. тормозятся запросы, в которых много соединений из разных таблиц.
 
Останнє редагування:
Ищу репетитора по веб программированию.Пишите в лс.
 
Назад
Зверху Знизу