Ответы пользователя по тегу MySQL
  • Как осуществить поиск неточных совпадений по MySQL?

    Exploding
    @Exploding
    wtf?
    Когда-то давным давно в древности, написал ответ-простыню на похожий вопрос. Самая эффективная реализация в номинации "из говна и палок".
    Ответ написан
    Комментировать
  • Как вычислить кто делает определенные запросы к базе?

    Exploding
    @Exploding
    wtf?
    Повесьте триггеры на after insert и before delete события для нужной таблицы и пишите в отдельную таблицу все, что нужно, для раскрытия этого громкого преступления века: логин пользователя, метка времени, нужные ID и т.д.
    Ответ написан
    Комментировать
  • Запрос количество материалов пользователей на сайте c фильтром категорий?

    Exploding
    @Exploding
    wtf?
    Потому, что ошибка в логике. Поле catid не может одновременно содержать "56" и "54"
    Вот так пишите:
    SELECT COUNT(*) AS 'Количество материалов'
          FROM #__content
          WHERE #__content.created_by = 834
          AND #__content.catid IN (56, 54)

    Должно работать
    Ну или так (чтоб понимать в чем суть ошибки):
    SELECT COUNT(*) AS 'Количество материалов'
          FROM #__content
          WHERE #__content.created_by = 834
          AND (#__content.catid = 56 OR #__content.catid = 54)
    Ответ написан
    2 комментария
  • В чем может быть проблема? Не работает скрипт, который проработал 2 дня?

    Exploding
    @Exploding
    wtf?
    Может как-то так? Код не проверял, поэтому если вдруг что - поправите там уже...
    function isTheseParametersAvailable($params){
    	//assuming all parameters are available 
    	$missingparams = array();
    	
    	foreach($params as $param){
    		if(!isset($_POST[$param]) || !strlen($_POST[$param]))
    			$missingparams[] = $param; 
    	}
    	
    	if(count($missingparams)){
    		$response['error'] = true; 
    		$response['message'] = 'Parameters ' . implode(", ", $missingparams) . ' missing';
    		exit(json_encode($response));
    	}
    }
    Ответ написан
    Комментировать
  • Как сделать чтобы данные формы после обновления страницы, не отправлялись вновь?

    Exploding
    @Exploding
    wtf?
    С помощью редиректа на себя же, или куда там вам нужно, после успешного лог_ин-а.
    Ответ написан
    2 комментария
  • Как сравнить значение с перечнем значений и получить результат в mysql?

    Exploding
    @Exploding
    wtf?
    Единственное, что может подойдет в таком случае, это - добавление "," в начало и конец строки. Т.е. чтобы строка выглядела так: ,10,50,20,1,59,
    Тогда можно наверняка будет знать где начало, а где конец значения и искать типа так как-то:
    select ... where `sizes` RLIKE(',10,|,50,|,30,')
    или
    select  ... where `sizes` like '%,10,%' or `sizes` like '%,50,%' or `sizes` like '%,30,%'

    Может быть и как-то и по другому можно, но я хз.
    А вообще по-хорошему - реорганизуйте структуру хранения данных и приведите все к правильному виду. Да и скорость будет получше.
    Ответ написан
    Комментировать
  • Ошибка при регистрации пользователя, как исправить?

    Exploding
    @Exploding
    wtf?
    Начиналось как инсерт, а потом в апдейт потянуло:)
    INSERT INTO `accounts` SET
    ---------
    insert into table (...) values (...)
    update table set field='value' where ...
    Ответ написан
  • Как найти две одинаковые записи в таблице mysql?

    Exploding
    @Exploding
    wtf?
    Так пойдет?
    SELECT `fieldname`, count(*) FROM `table` GROUP BY `fieldname` HAVING count(*)>1


    P.S. А вообще конечно надо бы при посте в базу проверять есть ли такой товар. Ну или может поле уникализировать, чтобы "и муха не пролетела"))
    Ответ написан
  • Как вывести массив из базы в определённом формате?

    Exploding
    @Exploding
    wtf?
    В цикле:
    $param[$row['id']] = $row['title'];
    Ответ написан
    Комментировать
  • Это нормальная идея?

    Exploding
    @Exploding
    wtf?
    Ээээ, а вот с этого момента можно по-подробнее:
    То есть обычный "шпион" не сможешь просто методом перебора посмотреть всех моих пользователей.

    Т.е. сейчас (без uuid) "шпион" может посмотреть всех ваших пользователей?
    P.S. И дайте определение "шпиона" и что значит "посмотреть всех пользователей"?
    Ответ написан
    Комментировать
  • Не могу импортировать базу данных как исправить ошибку?

    Exploding
    @Exploding
    wtf?
    Если мне не изменяет логика - то нужно для пользователя "pain_user"@"localhost" открыть доступ к базе данных 'puh'.
    Должно получиться!)))
    Ответ написан
    2 комментария
  • Что с кодировкой?

    Exploding
    @Exploding
    wtf?
    Посмотрите в базе точно нормально залито?
    Проверьте кодировку полей и таблиц чтобы была utf8_general_ci
    Проверьте кодировку самих файлов через npp например.

    Так потому, что где-то не досмотрели, упустили, прое..али так сказать:)
    Ответ написан
  • Почему может быть большой размер таблицы wp_posts?

    Exploding
    @Exploding
    wtf?
    Точно не знаю, т.к. с WP никогда не имел дело, но думаю, что в базу запихнули картинки в base64
    Попробуйте может типа так:
    SELECT * FROM `wp_posts` WHERE LENGTH(`поле_с_контентом`) > 50000 например
    Получается, что на каждую запись в среднем ~20к символов приходится... Многовато...
    Ответ написан
    2 комментария
  • Как создать связь между таблицами?

    Exploding
    @Exploding
    wtf?
    Ну я табл. номеров представляю так:

    id
    object_id - связь один ко многим
    phone - номер тел.
    name - Имя человека
    description - Комент. Например: бухгалтер

    И третью таблицу можно удалить...
    Или же 3-ю таблицу использовать как справочник типов, если это важный параметр в работе...
    Ответ написан
  • Не подключается к MySQL?

    Exploding
    @Exploding
    wtf?
    Если у Вас нет автомобиля, это же не означает, что он у Вас никогда не ломается. Это означает только то, что у Вас его НЕТ. Так же и тут: отсутствие ошибки не показатель того, что все работает.
    И константы то, константы!! Наверняка не объявлены вообще...

    Приведите весь код.
    Ответ написан
  • Что делать если выкидывает с профиля при обновлении страницы?

    Exploding
    @Exploding
    wtf?
    Ну так видимо у Вас не сохраняются в сессии данные о том, что Вы залогинены.

    UPD. Вобщем независимо от этого:
    Пример для условия, что index.php является единственным и главным шаблоном
    session_start(); 
    if (empty($_SESSION['user_login'])) {
       //тут мы проверяем/обновляем и т.д.
    }
    session_write_close();
    Ответ написан
    6 комментариев
  • Как правильно спроектировать сайт и вывод информации из бд?

    Exploding
    @Exploding
    wtf?
    Эээ... Ну если предположить что магазины на одной cms, следовательно структура бд у них одинаковая. Поэтому я бы создал "верховный" конфиг в котором бы содержалась информация о коннекте к нужной бд и таким образом, мы бы управляли тем магазином, к бд которого подключились.
    Ответ написан
    Комментировать
  • Делаем свои логи, как?

    Exploding
    @Exploding
    wtf?
    А сколько стоит разместить рекламу там выше места, куда должны писаться логи?:)

    По сути вопроса:
    Php файл, который все это дело выполняет: загрузка, запросы и т.д. После или перед каждым необходимым для логировагия, действием вносит в переменную сессии данные о том как у него дела и т.д.
    А js по таймауту например в 500ms аякс запросом на этот же php или другой отдельный файл постоянно канючит "ну что там? ну что там?ну что там? ...." Ну и если ответ отличается от "отъе...сь еще не готово“ - помещает его в блок лога))
    Как-то так наверное
    Ответ написан
    6 комментариев
  • Как вывести имя авторизованного пользователя?

    Exploding
    @Exploding
    wtf?
    Вот так:
    if (isset($_POST['login_u'])) {
    		$login_true = mysqli_query($connections, "SELECT * FROM `users` WHERE login='".$_POST['login']."' AND password = MD5('".$_POST['password']."')");
    		if ($login_true) {
    				$user = mysql_fetch_assoc($login_true);
    				$_SESSION['login_user'] = $login_true;
    				$_SESSION['user_name'] = $user['name']; //или где там имя храниться
    		} else echo "Не правильно";
      	}	
    echo "Здрасте, ".$_SESSION["user_name"];


    Только Вы бы почитали про sql-инъекции, а то так пихать в запрос все что не попадя - все равно что тянуть все в рот, что на дороге нашел...
    Ответ написан
    22 комментария
  • Как сделать поиск по ключевым словам?

    Exploding
    @Exploding
    wtf?
    Для этого используйте конструкцию MATCH AGAINST. В мануалах там много про это есть.
    Самые главные преимущества перед LIKE:
    - поиск происходит не просто по тексту как с лайком, а по индексированным данным, что намного быстрее!
    - опять таки поскольку данные индексированы, поиск умеет определять коэффициент релевантности(!), не плохо как для голого мускула, правда?)) И результат соответственно можно отсортировать по релевантности, что очень удобно по сравнению с лайком...
    Нюансы кратко:
    - для полей по которым будет осуществляться поиск должны быть определены полнотекстовые индексы
    - такой поиск не может искать вхождения в середине слова (не фразы, а именно слова!!!). Да в принципе это очень редко встречается на практике.
    Но зато поиск будет работать гораздо быстрее чем с LIKE!
    Чтобы искать например фразу "дохлые мыши не едят зерно" по словам, надо сделать такое:
    - фразу загоняем в массив по пробелу: $request = explode(" ", $req_array);
    - из массива удаляем заранее определенные части речи типа союзов, местоимений и т.д.
    хотя и не обязательно т.к. MATCH AGAINST игнорит слова 3 и менее символов, но подсознание подлое)), а и еще ж знаки препинания убрать, мало ли...
    И потом это все дело опять в строку $to_query = implode(" ", $request);
    И в запрос:
    select * from `table` WHERE MATCH (`myfield1`, `myfield2`) AGAINST ('$to_query' IN BOOLEAN MODE)

    И еще можно сортировку по релевантности состряпать изменив немного запрос:
    select *, MATCH (`myfield1`, `myfield2`) AGAINST ('$to_query' IN BOOLEAN MODE) as `score` from `table` WHERE MATCH (`myfield1`, `myfield2`) AGAINST ('$to_query' IN BOOLEAN MODE) order by `score` desc

    В итоге мы сможем найти фразу наподобие: "зерновые культуры и мыши - друзья, но если мыши дохлые" по трем словам.
    Заметьте, что ставить "%srch_str%" или "*srch_str*" не нужно!!! СУБД понимает все.
    Вот как бы такой он поиск. Но еще я прикручивал phpmorphy для того чтобы вытягивать словоформы для каждого слова, тогда можно будет найти фразу типа: "зерна постоянно смеются над дохлыми мышами"
    Вроде бы все:)
    А, нет, не все. Еще можно помимо LIKE использовать RLIKE.
    Для этого наш последний массив слов пихаем в строку, но только вот так:
    $to_query = implode("|", $request);
    И в запрос: select * from `table` WHERE `myfield1` RLIKE '$request' or `myfield2` RLIKE '$request'
    Как бы те же яйца, что и с LIKE но немного удобнее формировать сам запрос.
    Ответ написан
    Комментировать