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

Помогите по MySQL


SLASH_id

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

Имеем.

Таблица clients.

Структура:

 

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

 

 

 

Требуется:

 

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

 

 

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

  • 6 месяцев спустя...

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

 

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

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) 2
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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

Теперь немного 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.

  • Спасибо (+1) 1
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

Итак. Теперь вопрос по 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 недели спустя...

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

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

 

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

 

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

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))

 

  • Спасибо (+1) 1
  • Согласен 1
Ссылка на комментарий
Поделиться на другие сайты

Мало того что существует, так еще и успешно работает более 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 строку...

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

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

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



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

    • Namnayshka
      Автор Namnayshka
      Помогите, пожалуйста, поймал где-то heur trojan multi genbadur и касперский не справляется сам. Говорит что для лечения надо перезагрузка и после нее опять через 5 минут выдает предлагаемое лечение, и так по кругу. 
      Addition.txt Fixlog.txt FRST.txt
    • Sergio1900
      Автор Sergio1900
      файл сканирования и пример.zip
    • Zhuraulik
      Автор Zhuraulik
      При попытке очистить место для установки программы, диск "c" постоянно был переполнен. Просматривал папки, пока не наткнулся на папку programdata, при нажатии на которую проводник закрывался. В поисковике нашёл похожую проблему, но при попытке перейти на сайт с загрузкой антивируса, закрывался браузер. В том числе и данный сайт. Скачал всё через смартфон и перекинув на флешку запустил логер. Прикрепляю данные его работы.CollectionLog-2024.09.18-10.50.zip
    • Roman1111
      Автор Roman1111
      У Касперского не получается его удалить, постоянно вылетает уведолмение об удалении обьекта , но ничего не удаляется и не устраняется 
    • kmscom
      Автор kmscom
      Я теряюсь в большом разнообразии.
      Помогите определиться с выбором. У меня был ASUS ZenFone Max Pro M1 ZB602KL, 4/64 ГБ
      Заряда батареи хватало на полтора суток, две сим карты оказались лишними, достаточно одной.
      Фотографировал - так себе, на отвали. Андроид был 9 версии. Покупал за 17 000 в октябре 2018 года.

      Посоветуйте, что то на замену, из современных. Размер экрана желательно не меньше 6". Без челки. Рамка, чем тоньше, тем лучше или вовсе без нее. Чтобы заряда батареи хватало на не меньше 36 часов, при средней активности использования. Фотографировал хотя бы на 4+. Система должна быть Андроид, не меньше 10 версии, без лишних модифицирующих оболочек производителя, то есть почти голый Андроид от Гугла.
      Слот для внешней карты памяти обязателен.
      Вроде пока все. Ценовой диапазон, ну я думаю в 40 000 можно уложиться.
×
×
  • Создать...