Перейти к содержанию
Авторизация  
SLASH_id

Помогите по MySQL

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

Имеем.

Таблица clients.

Структура:

 

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

 

 

 

Требуется:

 

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

 

 

Поделиться сообщением


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

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. *
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

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

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

 

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

 

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

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 эмодзи.

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

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

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

Авторизация  

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