Перейти к содержанию

Помогите по MySQL


Рекомендуемые сообщения

Имеем.

Таблица clients.

Структура:

 

post-3402-0-81503100-1391888369_thumb.png

 

 

 

Требуется:

 

Для всех клиентов с city_id = 1090 изменить столбцы fio, company, phone, adress на <del>

 

 

Ссылка на сообщение
Поделиться на другие сайты
  • Ответов 31
  • Created
  • Последний ответ

Top Posters In This Topic

  • SLASH_id

    19

  • ACIK

    9

  • Skarbovoy

    4

Top Posters In This Topic

Popular Posts

UPDATE clients SET fio = '<del>', company = '<del>, phone = '<del>, adress = '<del>' WHERE city_id = 1090

SELECT O . * , O.nakladnaya AS 'number', O.status AS 'status', O.date_receive AS 'date', OA.who_get 'who', C_from.name AS 'from_city', C_to.name AS 'to_city', OA. * , OP. *, C_time_dst.time_dst

CONCAT - Возвращает строку, являющуюся результатом конкатенации аргументов. Др. словами - сложение строк. IF - оператор условия. Если comment - пустая строка (значение), то вернет пустую строку, есл

Posted Images

  • 6 months later...

Второй тур...

 

Итак есть запрос: 

SELECT O . * , O.nakladnaya AS  'number', O.status AS  'status', O.date_receive AS  'date', OA.who_get 'who', C_from.name AS  'from_city', C_to.name AS  'to_city', OA. * , OP. *
FROM (
orders O
JOIN orders_additional OA
JOIN orders_pay OP
)
LEFT JOIN orders_additional ON O.nakladnaya = OA.nakladnaya_id
LEFT JOIN  `clients` Cl_from ON Cl_from.client_id = O.sender_id
LEFT JOIN  `citys` C_from ON C_from.city_id = Cl_from.city_id
LEFT JOIN  `clients` Cl_to ON Cl_to.client_id = O.receiver_id
LEFT JOIN  `citys` C_to ON C_to.city_id = Cl_to.city_id
WHERE O.nakladnaya like TRIM('" . mysql_real_escape_string($_POST['nakl']) . "')
AND date_sent >= UNIX_TIMESTAMP(  '2012-01-01 00:00:00' )
AND OA.nakladnaya_id = O.nakladnaya
AND OP.nakladnaya_id = O.nakladnaya
LIMIT 1

Требуется:

 

Требуется в запрос впилить еще один Left Join из таблицы citys

Дабы в результате получить помимо того что и так запрашивается, еще и значение столбца time_dst где city_id таблицы citys равно to_city_id таблицы orders

 

Мой мозг не в силах превозмочь сие действие.

Помогите пожалуйста.


Доп инфо:

Структура orders:

post-3402-0-39003000-1409811814_thumb.png

 

Структура orders_additional:

post-3402-0-73057100-1409811866_thumb.png

 

Структура orders_pay:

post-3402-0-64969000-1409811938_thumb.png

 

Структура citys:

post-3402-0-43431900-1409811986_thumb.png

 

Изменено пользователем SLASH_id
Ссылка на сообщение
Поделиться на другие сайты
SELECT O . * , O.nakladnaya AS  'number', O.status AS  'status', O.date_receive AS  'date', OA.who_get 'who', C_from.name AS  'from_city', C_to.name AS  'to_city', OA. * , OP. *,

C_time_dst.time_dst AS 'time_dst'

FROM (
orders O
JOIN orders_additional OA
JOIN orders_pay OP
)
LEFT JOIN orders_additional ON O.nakladnaya = OA.nakladnaya_id
LEFT JOIN  `clients` Cl_from ON Cl_from.client_id = O.sender_id
LEFT JOIN  `citys` C_from ON C_from.city_id = Cl_from.city_id
LEFT JOIN  `clients` Cl_to ON Cl_to.client_id = O.receiver_id
LEFT JOIN  `citys` C_to ON C_to.city_id = Cl_to.city_id

LEFT JOIN  `citys` C_time_dst ON C_time_dst.city_id = O.to_city_id

WHERE O.nakladnaya like TRIM('" . mysql_real_escape_string($_POST['nakl']) . "')
AND date_sent >= UNIX_TIMESTAMP(  '2012-01-01 00:00:00' )
AND OA.nakladnaya_id = O.nakladnaya
AND OP.nakladnaya_id = O.nakladnaya
LIMIT 1

Писалось в блокноте.

Изменено пользователем Skarbovoy
Ссылка на сообщение
Поделиться на другие сайты
  • 1 month later...

Продолжаем топик.

Теперь немного php

$sql_h = "UPDATE orders_additional set comment = CONCAT(comment, IF(comment='','','\\n'), '" . $_POST["nkl_new"] . "')
          WHERE nakladnaya_id = '" . $_POST["nkl"] . "'";

Кто скажет, каково будет значение comment?

Что означает CONCAT(comment, IF(comment='','','\\n') ??

Ссылка на сообщение
Поделиться на другие сайты

CONCAT - Возвращает строку, являющуюся результатом конкатенации аргументов. Др. словами - сложение строк.

IF - оператор условия. Если comment - пустая строка (значение), то вернет пустую строку, если нет - вернет разделитель строк (новая строка). Сделано, чтобы исключить переход на новую строку в пустых строках comment.

 

Итог: формируется строка из старого значения comment(аргумент 1), перехода на новую строку(аргумент 2) и значения поля nkl_new (аргумент 3). Если comment пустое, просто заносится значение из nkl_new.

Ссылка на сообщение
Поделиться на другие сайты

Итак. Теперь вопрос по php+html

 

Имеем: 

 

Страничку с содержимым.

В конце странички:

<a href="javascript:void(0)" onclick="window.open('find_image.php?nakl={$vars.nakladnaya}', '', 'width=800,height=650,scrollbars=yes')">Скан-копия</a>

3af3f33eb7dc.jpg

 

По клику открывается popup и исполняется find_image.php с параметром nakl={$vars.nakladnaya}

Содержимое find_image.php:

 

<?php

session_start();

require("./system/config.php");

$smarty->template_dir = "./templates";
$smarty->compile_dir = "./templates_c";

$real_url = "/opt/arhiv-nakl/";

if($_GET[nakl])
{
	// поиск файла в каталоге по маске
	$command = "find $real_url -iname *" . str_replace("/", "-", $_GET[nakl]) . "*";
	
	$ph = popen( $command , "r" ) or die("error");
	
	while( !feof($ph) )
	{
	  $res[] = trim(fgets($ph, 1024));
	}
	
	pclose($ph);
	
	if($res)
	  foreach($res as $value)
		  if($value)
			  $res_ar[] = str_replace($real_url, "", $value);
	
	$smarty->assign("result", $res_ar);
}

$smarty->assign("nakl", $_GET[nakl]);

$smarty->display("find_image.tpl.html");

?>

 

 

Содержимое find_image.tpl.html:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>+++++++++++</title>
<meta content="text/html; charset=windows-1251" http-equiv="Content-Type">
<link href="styles.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff">
{if $smarty.get.nakl}
<b><font size="3">Результаты поиска (<font color="blue">{$nakl}</font>):</font></b>
{if !$result}
  <font color="red" size="3"><b>нет данных</b></font>
 
{else}
  <ul>
  {section name=id loop=$result}
   <li><a href="?nakl={$smarty.get.nakl}&img={$result[id]}">{$result[id]|replace:"nakls/":""|replace:"/":" - "|replace:".jpg":""|replace:"original":"<font color=red>original</font>"}</a>
  {/section}
  </ul>
{/if}
{if $smarty.get.img}
<img src="./nakls/{$smarty.get.img}" alt="Накладная">
{/if}
{/if}
</BODY></HTML>

 

 

 

Требуется каким-либо образом сделать открытие сего окна с параметром не в новом окне по клику, а прямо сразу отображать на этой же странице ниже (в отдельном фрейме?)

 

Буду рад советам.

Изменено пользователем SLASH_id
Ссылка на сообщение
Поделиться на другие сайты
  • 2 weeks later...

Так. Предыдущий вопрос снимаю.

Много гемора.

 

Вопрос теперь такой.

 

Имеем кой какую проверку в коде:
 

if(($receiver['city_id'] == '1527') || ($sender['city_id'] == '1527') || ($sender['city_id'] == '5') || ($receiver['city_id'] == '5') || ($sender['city_id'] == '27') || ($receiver['city_id'] == '27') || ($sender['city_id'] == '28') || ($receiver['city_id'] == '28') || ($sender['city_id'] == '125') || ($receiver['city_id'] == '125') || ($sender['city_id'] == '240') || ($receiver['city_id'] == '240') || ($sender['city_id'] == '260') || ($receiver['city_id'] == '260') || ($sender['city_id'] == '282') || ($receiver['city_id'] == '282') || ($sender['city_id'] == '292') || ($receiver['city_id'] == '292') || ($sender['city_id'] == '326') || ($receiver['city_id'] == '326') || ($sender['city_id'] == '344') || ($receiver['city_id'] == '344') || ($sender['city_id'] == '373') || ($receiver['city_id'] == '373') || ($sender['city_id'] == '384') || ($receiver['city_id'] == '384') || ($sender['city_id'] == '457') || ($receiver['city_id'] == '457') || ($sender['city_id'] == '477') || ($receiver['city_id'] == '477') || ($sender['city_id'] == '480') || ($receiver['city_id'] == '480') || ($sender['city_id'] == '548') || ($receiver['city_id'] == '548') || ($sender['city_id'] == '605') || ($receiver['city_id'] == '605') || ($sender['city_id'] == '920') || ($receiver['city_id'] == '920') || ($sender['city_id'] == '973') || ($receiver['city_id'] == '973') || ($sender['city_id'] == '974') || ($receiver['city_id'] == '974') || ($sender['city_id'] == '1010') || ($receiver['city_id'] == '1010') || ($sender['city_id'] == '1104') || ($receiver['city_id'] == '1104') || ($sender['city_id'] == '1137') || ($receiver['city_id'] == '1137') || ($sender['city_id'] == '1143') || ($receiver['city_id'] == '1143') || ($sender['city_id'] == '1152') || ($receiver['city_id'] == '1152') || ($sender['city_id'] == '1155') || ($receiver['city_id'] == '1155') || ($sender['city_id'] == '1157') || ($receiver['city_id'] == '1157') || ($sender['city_id'] == '1158') || ($receiver['city_id'] == '1158') || ($sender['city_id'] == '1160') || ($receiver['city_id'] == '1160') || ($sender['city_id'] == '1162') || ($receiver['city_id'] == '1162') || ($sender['city_id'] == '1169') || ($receiver['city_id'] == '1169') || ($sender['city_id'] == '1217') || ($receiver['city_id'] == '1217') || ($sender['city_id'] == '1239') || ($receiver['city_id'] == '1239') || ($sender['city_id'] == '1325') || ($receiver['city_id'] == '1325') || ($sender['city_id'] == '1330') || ($receiver['city_id'] == '1330') || ($sender['city_id'] == '1331') || ($receiver['city_id'] == '1331') || ($sender['city_id'] == '1348') || ($receiver['city_id'] == '1348') || ($sender['city_id'] == '1372') || ($receiver['city_id'] == '1372') || ($sender['city_id'] == '1469') || ($receiver['city_id'] == '1469') || ($sender['city_id'] == '1510') || ($receiver['city_id'] == '1510') || ($sender['city_id'] == '1511') || ($receiver['city_id'] == '1511') || ($sender['city_id'] == '1512') || ($receiver['city_id'] == '1512') || ($sender['city_id'] == '1513') || ($receiver['city_id'] == '1513') || ($sender['city_id'] == '1514') || ($receiver['city_id'] == '1514') || ($sender['city_id'] == '1515') || ($receiver['city_id'] == '1515') || ($sender['city_id'] == '1516') || ($receiver['city_id'] == '1516') || ($sender['city_id'] == '1517') || ($receiver['city_id'] == '1517') || ($sender['city_id'] == '1518') || ($receiver['city_id'] == '1518') || ($sender['city_id'] == '1519') || ($receiver['city_id'] == '1519') || ($sender['city_id'] == '1520') || ($receiver['city_id'] == '1520') || ($sender['city_id'] == '1521') || ($receiver['city_id'] == '1521') || ($sender['city_id'] == '1522') || ($receiver['city_id'] == '1522') || ($sender['city_id'] == '1523') || ($receiver['city_id'] == '1523') || ($sender['city_id'] == '1524') || ($receiver['city_id'] == '1524') || ($sender['city_id'] == '1529') || ($receiver['city_id'] == '1529') || ($sender['city_id'] == '1530') || ($receiver['city_id'] == '1530') || ($sender['city_id'] == '1531') || ($receiver['city_id'] == '1531') || ($sender['city_id'] == '1532') || ($receiver['city_id'] == '1532') || ($sender['city_id'] == '1533') || ($receiver['city_id'] == '1533'))

Можно этот код как-то оптимизировать?

Ссылка на сообщение
Поделиться на другие сайты

SLASH_id, это вы тестовые задания выполняете или этот "кривокод" существует в реальности?

По скорости скорее не выиграете, а вот по удобству и читабельности... можно использовать функцию in_array()

 

Запихнем все нужные значения city_id в массив $arr_id. Например так:

$arr_id = array('1527', '5', '27', '28', '125', ...................);

А вот и новый if:

if(in_array($receiver['city_id'],$arr_id) || in_array($sender['city_id'],$arr_id))

 

Ссылка на сообщение
Поделиться на другие сайты

Мало того что существует, так еще и успешно работает более 10 лет. (Писал не я)

 

Спасибо за массив. Завтра же применю.


@ACIK,

 

И еще.

 

Если выполнить запрос:

SELECT * 
FROM  `predstav_city` 
WHERE  `predstav_id` =27
OR  `predstav_id` =28
ORDER BY  `predstav_city`.`city_id` ASC 
LIMIT 0 , 30000 

Получим как раз нужный мне результат в поле city_id

post-3402-0-34531100-1415211786_thumb.png

 

Есть ли возможность автоматически формировать массив? 

Ссылка на сообщение
Поделиться на другие сайты

Конечно, да. :)

 

Так обычно и выполняется подобная задача.


Функции mysql_fetch_array() или mysql_fetch_row()

А в запросе можно, например, оставить только city_id, если predstav_id в дальнейшем не задействована (используется только в отборе).
Ссылка на сообщение
Поделиться на другие сайты

@ACIK, Покурил по mysql_fetch_array...

 

Так?

$result = mysql_query("SELECT city_id FROM  `predstav_city` WHERE  `predstav_id` =27 OR  `predstav_id` =28 ORDER BY  `predstav_city`.`city_id` ASC");
   $arr_id = mysql_fetch_array($result, MYSQL_NUM) 
Ссылка на сообщение
Поделиться на другие сайты

P.S. Если заботитесь о свободной памяти, то можно еще в конце вызвать mysql_free_result().

Так?

Так выведет только 1 строку...

Тут нужен цикл.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Похожий контент

    • Иван_Холодов
      От Иван_Холодов
      Недавно словил удалённый доступ John (rms) и майнер Mysql, всё почистил, кроме папок с следами от майнеров и удалённых доступов. Папки в проводнике скрыты, а в cmd не даёт удалить-пишет "Отказано в доступе" (картинка 1). Также невозможно установить Rogue killer, HitmanPro, Malwarebytes (картинка 2). В прошлой винде создавал нового пользователя с правами администратора и там всё проворачивал. После этого отказал Microsoft store и все приложения из него, а также настройки багались при переходе на вкладку "Дисплей" в "Системе". В новой винде страшно создавать нового пользователя. Как мне вернуть права администратора без переустановки?


    • SnakeEyes
      От SnakeEyes
      MySQL 8.0, работающий с Касперским создаёт ежедневно логи весом в 1гб, поддержка сказала что у нас происходит запись в эти логи практически каждого шороха. Вопрос в том, что мне поменять в прикреплённом файле чтобы у меня логи хранились неделю и записывались туда только важные или критические изменения.
      Новый текстовый документ.txt
    • Troki
      От Troki
      Здравствуйте! Возникла проблема такого рода, в браузере Microsoft Edge открываются сами по себе вкладки с рекламой, прости господи, с порно, открывается паблик в вк и всякие разные ставки, даже если браузер закрыт, он открывается из за какого нибудь сайта. Касперский вылечил и удалил несколько вирусов, но проблема не исчезла, на форумах я нашла приложение RogueKiller, скачала и провела сканирование, который показал наличие нескольких угроз, а именно: Mysql в папке Fonts, puzzleMedia в ProgramData, были еще несколько которые получилось удалить нехитрым способом через unlocker
      Так же хочу заметить что у меня был какой то пользователь с правами администратора, я его так же удалила, не знаю, вернется он или нет, но вроде пока его нет

    • GreyCats
      От GreyCats
      Здравствуйте! При включении компьютера произвольно открывается основной браузер (в моём случае Opera) с новой рандомной вкладкой, от безобидной рекламы до сайтов-вымогателей и порно. Не уверен, есть ли тут прямая связь, но при работе с браузером иногда выключается монитор и зависает компьютер. Хотя при работе с видеоредактором или в играх такой проблемы нет. Сканирование на вирусы выявило несколько нежелательных элементов, от одного из которых - mysql в папке fonts - так просто не избавиться. Прикрепляю логи (не знаю, насколько это критично, но я ошибся и второй раз запустил тот же Avbr после первой проверки, так что прикрепил оба)
      AV_block_remove_2022.12.02-18.04.log CollectionLog-2022.12.02-18.23.zip AV_block_remove_2022.12.02-18.12.log
    • puruzento
      От puruzento
      Добрый день! Вас беспокоят с АО "НЦВ Миль и Камов", нам пришла сегодня новая лицензия на Касперский, но мы также решили поменять (сделали новый с нуля) сервер для АВ, вместо SQL Express, который не устраивал нас по размерам БД, поставили MySQL 5.7 на CentOS 8. При попытке добавить лицензию происходит следующая ошибка:
      Ошибка времени выполнения: Database error occured: #1950 (1366) Generic db error: "1366, 'Incorrect string value: '\xD0\x90\xD0\xBA\xD1\x81...' for column '__vtmp_wstrPartnerName' at row 1' , LastStatement='SET @arg31 = NULL; SET @arg32 = NULL; SET @arg33 = NULL; CALL licsrv_install_key(0, 1017, 'XXX-XXXXXX-XXXXXXXX', _utf8'Kaspersky Endpoint Security для бизнеса – Расширенный Russian Edition. 5000+ Node 3 year Renewal License: Security Center', 3650, 1009, 1, 0, '',
       
      Судя по моим поискам в Интеренете, это может быть связано с кодировкой, поэтому, я везде, поставил расширенную версию UTF (раньше стояло UTF8).
      Параметры MySQL
      mysql> SHOW VARIABLES LIKE "coll%";
      +----------------------+--------------------+
      | Variable_name        | Value              |
      +----------------------+--------------------+
      | collation_connection | utf8mb4_general_ci |
      | collation_database   | utf8mb4_unicode_ci |
      | collation_server     | utf8mb4_general_ci |
      +----------------------+--------------------+
      mysql> SHOW VARIABLES LIKE "charac%";
      +--------------------------+----------------------------+
      | Variable_name            | Value                      |
      +--------------------------+----------------------------+
      | character_set_client     | utf8mb4                    |
      | character_set_connection | utf8mb4                    |
      | character_set_database   | utf8mb4                    |
      | character_set_filesystem | binary                     |
      | character_set_results    | utf8mb4                    |
      | character_set_server     | utf8mb4                    |
      | character_set_system     | utf8                       |
      | character_sets_dir       | /usr/share/mysql/charsets/ |
      +--------------------------+----------------------------+
      Сам параматер wstrpartnerName найден мной в таблице v_lickey, его параметры
      | wstrPartnerName        | varchar(256) | ucs2_general_ci  | YES  |     | NULL   
       
      CNF файл:
      [client]
      default-character-set = utf8mb4
      [mysqld]
      join_buffer_size = 20M
      sort_buffer_size = 10M
      tmp_table_size = 200M
      max_heap_table_size = 200M
      key_buffer_size = 200M
      innodb_buffer_pool_size = 80G
      innodb_thread_concurrency = 20
      innodb_flush_log_at_trx_commit = 0
      innodb_lock_wait_timeout = 300
      max_allowed_packet = 32M
      max_connections = 151
      character_set_server = utf8mb4
      # read_rnd_buffer_size = 2M
      datadir=/var/lib/mysql
      socket=/var/lib/mysql/mysql.sock
      init_connect = 'SET NAMES utf8mb4'
      #default-character-set = utf8mb4
      # Disabling symbolic-links is recommended to prevent assorted security risks
      symbolic-links=0
      log-error=/var/log/mysqld.log
      pid-file=/var/run/mysqld/mysqld.pid
       
      Ошибка остается, нужна помощь.
       
      Версия центр администрирования 13.1.0.8324, MS Windows Server 2016.

×
×
  • Создать...