Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 25.09.2016, 07:36
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Шизики блин развлекаются в порядке "не мешайте страдать". Когда-то я тоже не знал SQL, а про JSON не знал вообще, и ничтоже сумняще захерачил сайт с бд в файлах на XML'e. Вот как делается блин, если вы на русском не понимаете, то поймете на xml'ном

<cars>

	<car_params>
		<part id="1">Тип кузова / Цвет</part>
		<part id="2">Двигатель</part>
		<part id="3">Коробка передач</part>
		<part id="4">Тормоза</part>
		<part id="5">Топливо / Бак</part>	
		<part id="6">Расход топлива</part>
		<part id="7">Руль / Свет</part>
		<part id="8">Привод</part>
		<part id="9">Мультимедия</part>
		<part id="10">Интерьер</part>
	</car_params>
	
	<price_params>
		<price id="1">Прокат на 1 сутки с лимитом пробега в 250 км</price>
		<price id="2">Прокат на 1 сутки без лимита пробега</price>
		<price id="3">Тариф выходного дня с лимитом пробега в 250 км</price>
		<price id="4">Тариф выходного дня без лимита пробега</price>
		<price id="5">Переплата за каждый километр свыше лимита</price>
		<price id="6">Почасовая аренда автомобиля без водителя</price>
	</price_params>

	<car id ="Lancer15">
	
		<title>
			<manufacturer>Mitsubishi</manufacturer>
			<modelName>Lancer</modelName>
			<bodyName>X 1.5</bodyName>
		</title>

		<parts>
			<part id="1">Седан / Черный</part>
			<part id="2">Объем: 1.5 л. Мощность: 109 лс.</part>
			<part id="3">Автоматическая; вариатор с ручным режимом</part>
			<part id="4">Дисковые. ABS + EBD (система распределения тормозных усилий)</part>
			<part id="5">Неэтилированный бензин Аи-92 / 59 л.</part>
			<part id="6">Город: 8.9; Трасса: 6.0; Смешанный цикл: 7.0</part>
			<part id="7">Слева / Европейский + противотуманные фары</part>
			<part id="8">Передний</part>
			<part id="9">CD-MP3 ресивер, радио, 4 динамика</part>
			<part id="10">Концидионер, подогрев сидений, тканевая обивка, фильтр салона</part>
		</parts>

		<prices>
			<price id="1">3700</price>
			<price id="2">4200</price>
			<price id="3">11100</price>
			<price id="4">12600</price>
			<price id="5">5</price>
			<price id="6">500</price>
		</prices>
		
	</car>


<car_params> сущность (таблица) названий сущностей параметров для всех машин, и она связана с любой таблицей <car><parts> через атрибут id

<price_params> таблица названий услуг для всех машин и она связана с любой таблицей <car><prices> через атрибут id

То есть <car_params> и <price_params> существуют в единственном экземпляре, а <parts> и <params> существуют в любом количестве внутри сущности <car>, которых может быть любое количество.

Это называется нормализация. Без нормализации dzho ты будешь тонуть в гавнокоде при каждом чихе. А рони, он просто не понимает, что такое реляционная БД, а у тебя как раз реляционная БД на входе.

Развлекайтесь далее.
Ответить с цитированием
  #22 (permalink)  
Старый 25.09.2016, 07:51
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Машинками надоело торговать, продаешь ванны? Ну какая разница. Сущности надо выяснять, а не говнокоды писать.

Enamelling: { // Галоперидол
	product: 1500,  // цена за какую длину?
	meterOne: 1400, // Где длина?
	meterTwo: 1500, // стоимость длины ванны 1.50 - где длина?
	meterThree: 1500, //стоимость длины ванны 1.70 - где длина?
	colorBath: 0, // А если из 20 оттенков 3 будут по другой цене?
	option: 1500, // и чем отличается установка уголка на чугун от пластика?
	optionTwo: 1400, // какое отношение эмалированная ванна
	optionThree: 2000, // имеет к сервису
	optionFour: 850, // установки счетчиков
	optionFive: 900 // и еще установки счетчиков ???
},


ржунимагу блин. Не будет так работать никогда.
Ответить с цитированием
  #23 (permalink)  
Старый 25.09.2016, 08:19
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

А теперь самое больное. У машинки есть базовая и опции, а у ванны нет опций, нельзя убрать цвет или покрытие, можно только выбрать из того, что производится. На json ванная опупея будет примерно такой

var params={

	Len:{
		1:1200,
		2:1500,
		3:1700,
	},

	Hue:{
		1:'Perl',
		2:'Pale',
		3:'Water',
		4:'Smoke'
	},

	Mat:{
		1:'Чугун',
		2:'Сталь',
		3:'Акрил'
	},

	Sur:{
		1:'Эмаль',
		2:'Гуашь',
		3:'Акрил'
	},

	Shp:{
		1:'Овальная',
		2:'Прямоугольная',
		3:'Трехуйгольная'
	}
},

products={

	'00007643':{
		id:'00007643',
		name:'Акриловая овальная ванна Даздраперма белого цвета длиной 1500 мм',
		len:2,
		mat:3,
		hue:1,
		sur:null,
		shp:1,
		price:10500
	},

	'00007644':{
		id:'00007644',
		name:'Чугунная ванна Заря трехуйгольной формы палевого цвета длиной 1700 мм',
		len:3,
		mat:3,
		hue:2,
		sur:1,
		shp:3,
		price:20500
	},
	
	'00007645':{
		id:'00007645',
		name:'Стальная прямоугольная ванна Иосиф дымчатого цвета длиной 1200 мм',
		len:1,
		mat:2,
		hue:4,
		sur:3,
		shp:1,
		price:15400
	},

};


Зачем тогда все эти шмопции, если ценник уже вписан в продукт и название целиком его описывает? Ну для фильтрации и быстрого поиска. Так вот имея такой нормализованный жисон, становится проще пареной репы приделать к нему интерфейс, поскольку уже все само самочевидно.

Последний раз редактировалось warren buffet, 25.09.2016 в 08:43.
Ответить с цитированием
  #24 (permalink)  
Старый 25.09.2016, 08:28
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

А насчет опций оттенка скажем, с ними известный затык. Как ты продашь серый цвет без артикула? Как ты проведешь серый без артикула? Как отчитаешься за серый без артикула?

Любая опция порождает сущность - артикул товара. Либо ты продаешь не один товар, а комплект из более чем одного артикула. Всякие уголки и счетчики так и продаются - как список артикулов, как чек с итого.

Прекращайте мозг насиловать и займитесь уже делом. Лал.
Ответить с цитированием
  #25 (permalink)  
Старый 25.09.2016, 08:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

dzho,
это не дерево, это грабли ...
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">


</head>

<body>
<div class="block-form">

<form id="form" action="http://">
<h2>Наши услуги</h2>
  <div class="block-left">

<!-- Выбор услуги -->

<select  class="ListService">
<option  value="">Выбрать</option>
<option  value="Enamelling">Эмалировка</option>
<option  value="Starkril">Старкрил 2</option>
<option  value="liquidAcrylic">Жидкий акрил</option>
<option  value="AcrylicLiner">Акриловый вкладыш</option>
</select>
<br>
<!-- Длина ванны -->

<select  class="meters">
<option value="">Выбрать</option>
<option value="meterOne">1м.20 см</option>
<option value="meterTwo">1м.50 см</option>
<option value="meterThree">1м.70 см</option>
</select>

<!-- Опции услуг -->
  <label for="opt">
<input type="checkbox" class="optionally" id="opt"><p>Цвет ванны</p>
</label>

 <label for="opt1">
<input type="checkbox" class="optionally" id="opt1"><p>Установка уголка</p>
</label>

<label for="opt2">
<input type="checkbox" class="optionally" id="opt2"><p>Установка сливной системы</p>
</label>

 <label for="opt3">
<input type="checkbox" class="optionally" id="opt3"><p>Установка экрана под ванну</p>
</label>

<label for="opt4">
<input type="checkbox" class="optionally" id="opt4"><p>Установка счетчиков.гор. холодной воды</p>
</label>

    <label for="opt5">
<input type="checkbox" class="optionally" id="opt5"><p>Установка счетчиков.хол. горячей воды</p>
</label>
    <h3>Итого</h3>

</div>

<div class="block-right">
<!-- checkbox list  -->

<!-- Здесь значение меняются от выбранных вариантов -->

<!-- size product -->

<input type="text" class="rez" placeholder="0 руб" readonly="readonly"> <!-- зависимость от первого select -->
<input type="text" class="rez" placeholder="0 руб" readonly="readonly"> <!-- зависимость от второго select -->

<input type="text" class="rez" placeholder="0 руб" readonly="readonly">

<input type="text" class="rez" placeholder="0 руб" readonly="readonly">

<input type="text" class="rez" placeholder="0 руб" readonly="readonly">

<input type="text" class="rez" placeholder="0 руб" readonly="readonly">

<input type="text" class="rez" placeholder="0 руб" readonly="readonly">
<input type="text" class="rez" placeholder="0 руб" readonly="readonly">
<br>
</div>

<input type="text" class="summa" placeholder="Сумма">
</form>

  </div>

<script>
window.addEventListener("DOMContentLoaded", function() {
    var d = {
            Enamelling: { // Эмалировка
                product: 1500,  // цена
                meterOne: 1400, // стоимость длины ванны 1.20
                meterTwo: 1500, // стоимость длины ванны 1.50
                meterThree: 1500, //стоимость длины ванны 1.70
                colorBath: 0, // стоимость цвета заливки
                option: 1500, // checkbox установка уголка
                optionTwo: 1400, // checkbox установка сливной системы
                optionThree: 2000, // checkbox установка экрана под ванну
                optionFour: 850, // установка счетчиков гор.холодн.воды
                optionFive: 900 // установка счетчиков хол. горячей воды
            },
            Starkril: { // Старкрил 2

                product: 2000, // цена
                meterOne: 1400, // стоимость длины ванны 1.20
                meterTwo: 1500, // стоимость длины ванны 1.50
                meterThree: 1500, //стоимость длины ванны 1.70
                colorBath: 0, // стоимость цвета заливки
                option: 1500, // checkbox установка уголка
                optionTwo: 1400, // checkbox установка сливной системы
                optionThree: 2000, // checkbox установка экрана под ванну
                optionFour: 850, // установка счетчиков гор.холодн.воды
                optionFive: 900 // установка счетчиков хол. горячей воды
            },
            liquidAcrylic: { // Жидкий акрил
                product: 3000, // цена
                meterOne: 1500, // стоимость длины ванны 1.20
                meterTwo: 2000, // стоимость длины ванны 1.50
                meterThree: 2500, //стоимость длины ванны 1.70
                colorBath: 0, // стоимость цвета заливки
                option: 1500, // checkbox установка уголка
                optionTwo: 1400, // checkbox установка сливной системы
                optionThree: 2000, // checkbox установка экрана под ванну
                optionFour: 850, // установка счетчиков гор.холодн.воды
                optionFive: 900 // установка счетчиков хол. горячей воды
            },

            AcrylicLiner: { // Акриловый вкладыш
                product: 1500, // цена
                meterOne: 1400,  // стоимость длины ванны 1.20
                meterTwo: 3000, // стоимость длины ванны 1.20
                meterThree: 3000, //стоимость длины ванны 1.70
                colorBath: 2000, // стоимость цвета заливки
                option: 2000, // checkbox установка уголка
                optionTwo: 0, // checkbox установка сливной системы
                optionThree: 2000, // checkbox установка экрана под ванну
                optionFour: 850, // установка счетчиков гор.холодн.воды
                optionFive: 900 // установка счетчиков хол. горячей воды
            },
        },
        f = document.querySelector("#form"),
        g = f.querySelector(".summa"),
        h = f.querySelectorAll(".rez"),
        a = f.querySelectorAll(".ListService, .meters, #opt,#opt1, #opt2, #opt3, #opt4,#opt5"),
        b,
        k = ["colorBath","option","optionTwo","optionThree","optionFour","optionFive"];
    f.addEventListener("change", function() {
        var c = a[0].value;
        b = [0, 0, 0, 0, 0 , 0, 0];
        if (c) {
            b[0] = d[c].product;
            var e = a[1].value;
            e && (b[1] = d[c][e]);
            k.forEach(function(el,i) {
       a[i+2].checked && (b[i+2] = d[c][el] )
});

        } else a[2].value = "";
        g.value = b.reduce(function(b, a, c) {
            h[c].value = a + " руб.";
            return b + a
        }, 0) + " руб."
    })
});

</script>



</body>
</html>
Ответить с цитированием
  #26 (permalink)  
Старый 25.09.2016, 09:24
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от рони
это не дерево, это грабли ...
Зайди на яндекс-маркет или на ламоду и убедись, что нет там никаких деревьев. На маркете все на xml и xsl шаблонах, а на любом нормальном ИМ в SQL'е ахиренная куча артикулов. Цвет кепки другой? - Другой артикул.

Только олени так делают, запихивают в продуктовую страницу двадцать других продуктов, а потом платят спаммерам за раскрутку, поскольку такое гавно невозможно проиндексировать нормально.

Ну а наш страдалец изобретает гавно из гавна.
Ответить с цитированием
  #27 (permalink)  
Старый 25.09.2016, 09:32
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

"Дерево" растет сугубо в навигационной таблице, которую можно и отрендерить как дерево, а каталог это всегда тупо листинг, список артикулов. И нафиг на ламоду не надо ходить, любые форумы так устроены. По id записи можно найти к какой теме она относится и к какой рубрике, вот так http://javascript.ru/forum/showthread.php?p=429718
Ответить с цитированием
  #28 (permalink)  
Старый 25.09.2016, 09:38
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

То есть адрес example.com/bath/197643-vanna-is-chugunia делается для красоты и по традиции, на самом деле он может быть таким example.com/197643 Никто в 21 веке не полезет в адресную строку стирать 197643-vanna-is-chugunia чтобы добраться до /bath Никто.
Ответить с цитированием
  #29 (permalink)  
Старый 25.09.2016, 09:40
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Если хочешь дерево, то проектируй дерево, есть решения, но практика не выносит их на поверхность, потому что деревья оказались не нужны. Все делают в adjacent list и похеру на некоторую избыточность данных. Нормализация не культ.
Ответить с цитированием
  #30 (permalink)  
Старый 25.09.2016, 09:45
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

В туторах по реляционным бд излюбленная фактура гуру - музыка. Типа пот есть альбом, у него есть исполнитель, год и треки. Типа вот таблица треков, там есть ид альбома, у альбома есть ид исполнителя, все красиво. Все красиво, пока это попса, а если классика? Если Аллегро Лето Вивальди исполняли 100500 оркестров? Или если эту прокладку производят 100500 фабрик? Деревья - это прошлое, это файловая система. В сетях давно рулят долбаные графы.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор услуг tarantino Javascript под браузер 1 30.07.2015 00:21
Не работает Калькулятор просчета отопления igor700 Общие вопросы Javascript 5 26.02.2014 16:18
Суммирование значений по всем динамически добавленным полям Joliat Общие вопросы Javascript 2 12.02.2014 16:01
Элементарный подсчет и калькулятор PashaShulga Общие вопросы Javascript 5 14.03.2012 21:42
Сделать калькулятор на сайт. asderru Работа 1 22.07.2010 13:46