MySQL и все с ним связанное

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

Модераторы: Aneta, ru

eugenyk
Сообщения: 63
Зарегистрирован: 29 ноя 2010 04:02
Откуда: Тобольск

Re: PHP and MySQL

Сообщение eugenyk » 06 фев 2011 09:46

Garipov72 писал(а):Что лучше? Сделать несколько запросов в БД или обработать один большой запрос?
я в этом не сильно шарю. имхо, нагрузка в целом ведь еще зависит от количества фтыкателей обращающихся к базе? чем их больше, тем больше нагрузка в случае множественных запросов. нет?

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: MySQL перенос данных с одного компьютера на другой ...

Сообщение Web_Master » 14 фев 2011 21:05

dooh писал(а):Вобщем тема такая:
есть база данных MySQL в ней уже есть некоторое количество данных ... мне требуется перенести и структуру и данные на другой компьютер (точнее я себе поставил Linux Ubuntu 10.4.1 а была установлена Windows XP). Как я сам понимаю у меня есть как один из вариантов, скопировать файл базы данных. Я не уверен правда что на Linux используется тотже формат файла и вообще возможно ли подключить на MySQL сервер еще один файл. Также естесвенно есть возможность экспорта данных с прежнего сервера и потом импорт в на новый сервер.

Подскажите как быть (и как лучше сделать):
Поставь phpMyAdmin и решишь все свои глобальные проблемы, в том числе перенос базы данных в структуре или вместе с данными.
Там же и узнаешь синтаксис подобных SQL запросов. phpMyAdmin будет полезен как для начинающих, так и для матерых программистов. В любой момент сможешь нажатием одной кнопки просмотреть структуру, сожержание базы, таблиц и т д.

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: PHP and MySQL

Сообщение Web_Master » 14 фев 2011 22:08

Garipov72 писал(а):Спасибо :) Просто я думал может MySQL быстрее выполняется чем php.
Если тебе нужны строки с некоторыми известными индексами(особенно первичными) то mysql сервер даст ответ достаточно быстро.
Так вот советую тебе обдумать структуру и загаловки полей таблиц, и стратся использовать WHERE для индексированых значений полей.
Я думаю 3-4 запроса к mysql его не озодачит, к тому же так гораздо проще сделать, чем загружать в память php большие массиы информации, да ещё обрабатывать их, а если еще тяжелыми регулярными выражениями! Короче сядет на 5ю точку твой php.
Плюс ко всему потребуется дополнительный код php оброботки, сортровки и всякие головники, ЗачемИзображение

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 14 фев 2011 22:42

:roll: запросов будет около 30 причем в цикле
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: MySQL и все с ним связанное

Сообщение Web_Master » 14 фев 2011 23:10

Garipov72 писал(а)::roll: запросов будет около 30 причем в цикле
подобно поясни, что ты хочешь делать?

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 14 фев 2011 23:10

Код: Выделить всё

function enclosed_categories ($quq='', $id='') {
	while ($rot = mysql_fetch_assoc ($quq)) {	
		$basic .= '<option ';
		if ($id == $rot['id']) {$basic .= 'selected ';}
		$basic .= ' value="'.stripslashes ($rot['id']).'">'.stripslashes ($rot['title']).'</option>\n';
		$root2 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot['id']."' ORDER BY title");
		if (mysql_num_rows ($root2)) {
			while ($rot2 = mysql_fetch_assoc ($root2)) {	
				$basic .= '<option ';
				if ($id == $rot2['id']) {$basic .= 'selected ';}
				$basic .= ' value="'.stripslashes ($rot2['id']).'">---'.stripslashes ($rot2['title']).'</option>\n';
				$root3 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot2['id']."' ORDER BY title");
				if (mysql_num_rows ($root3)) {
					while ($rot3 = mysql_fetch_assoc ($root3)) {	
						$basic .= '<option ';
						if ($id == $rot3['id']) {$basic .= 'selected ';}
						$basic .= ' value="'.stripslashes ($rot3['id']).'">------'.stripslashes ($rot3['title']).'</option>\n';
						$root4 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot3['id']."' ORDER BY title");
						if (mysql_num_rows ($root4)) {
							while ($rot4 = mysql_fetch_assoc ($root4)) {	
								$basic .= '<option ';
								if ($id == $rot4['id']) {$basic .= 'selected ';}
								$basic .= 'value="'.stripslashes ($rot4['id']).'">---------'.stripslashes ($rot4['title']).'</option>\n';
								$root5 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot4['id']."' ORDER BY title");
								if (mysql_num_rows ($root5)) {
									while ($rot5 = mysql_fetch_assoc ($root5)) {	
										$basic .= '<option ';
										if ($id == $rot5['id']) {$basic .= 'selected ';}
										$basic .= ' value="'.stripslashes ($rot5['id']).'">------------'.stripslashes ($rot5['title']).'</option>\n';							
										$root6 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot5['id']."' ORDER BY title");
										if (mysql_num_rows ($root6)) {
											while ($rot6 = mysql_fetch_assoc ($root6)) {	
												$basic .= '<option ';
												if ($id == $rot6['id']) {$basic .= 'selected ';}
												$basic .= ' value="'.stripslashes ($rot6['id']).'">---------------'.stripslashes ($rot6['title']).'</option>\n';							
												$root7 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot6['id']."' ORDER BY title");
												if (mysql_num_rows ($root7)) {
													while ($rot7 = mysql_fetch_assoc ($root7)) {	
														$basic .= '<option ';
														if ($id == $rot7['id']) {$basic .= 'selected ';}
														$basic .= ' value="'.stripslashes ($rot7['id']).'">------------------'.stripslashes ($rot7['title']).'</option>\n';							
														$root8 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot7['id']."' ORDER BY title");
														if (mysql_num_rows ($root8)) {
															while ($rot8 = mysql_fetch_assoc ($root8)) {	
																$basic .= '<option ';
																if ($id == $rot8['id']) {$basic .= 'selected ';}
																$basic .= ' value="'.stripslashes ($rot8['id']).'">---------------------'.stripslashes ($rot8['title']).'</option>\n';							
																$root9 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot8['id']."' ORDER BY title");
																if (mysql_num_rows ($root9)) {
																	while ($rot9 = mysql_fetch_assoc ($root9)) {	
																		$basic .= '<option ';
																		if ($id == $rot9['id']) {$basic .= 'selected ';}
																		$basic .= ' value="'.stripslashes ($rot9['id']).'">------------------------'.stripslashes ($rot9['title']).'</option>\n';							
																		$root10 = mysql_query ("SELECT * FROM the_enterprises_kat WHERE root_id='".$rot9['id']."' ORDER BY title");
																		if (mysql_num_rows ($root10)) {
																			while ($rot10 = mysql_fetch_assoc ($root10)) {	
																				$basic .= '<option ';
																				if ($id == $rot10['id']) {$basic .= 'selected ';}
																				$basic .= ' value="'.stripslashes ($rot10['id']).'">---------------------------'.stripslashes ($rot10['title']).'</option>\n';							
																			}
																		}	
																	}
																}	
															}
														}	
													}
												}	
											}
										}	
									}
								}						
							}
						}
					}
				}
			}
		}		
	}
	return $basic;
}
его надо сжать! Я таблице записей будет хоть и не много, и потом кеширвание будет, но все равно мне такой подход не очень по душе, хотя изменения в ней редко будут.

А в таблице хранится только id категори и id родительской категории.
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: MySQL и все с ним связанное

Сообщение Web_Master » 15 фев 2011 19:33

Я конечно всего кода и таблицы базы данных не видел, но помоему эта бредовая функция предназначена для пожирания ресурсов, а потом уже для получения списка OPTION -ов. Все можно сделать в PHP и гораздо проще используя всего 1 запрос к mysql серверу.

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 15 фев 2011 20:04

Почитайте топик выше! Я для этого и спрашивал. Лучше бы предложили лучший вариант я не нашел другого решения.
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: MySQL и все с ним связанное

Сообщение Web_Master » 15 фев 2011 21:34

Garipov72 писал(а):Почитайте топик выше! Я для этого и спрашивал. Лучше бы предложили лучший вариант я не нашел другого решения.
У ru не зря возникло желание отправить тебя читать мануалы, все что я понял ты или конифолишь нам всем мозг или хочешь решить элементарную задачу как то своеобразно, только не пойму какую? Опиши в словах свою таблицу, что хочешь извлечь из нее и с какими условиями, тогда может, что нибудь предложу.

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 15 фев 2011 21:41

Суть задачи: сделать большую вложенность категорий. (до 10)
В MySQL такая таблица: id (AI), title, id_root.
Id задается автоматом, title это как наверно понятно заголовок имеет текстовой вид, id_root - родительский элемент.

Конкретная задача, вывести скписок в option тегах, в зависимости от вложенности добавляется отступ.
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 15 фев 2011 21:45

Я не отрицаю, можно все в массив сталкать и рабоать с ним, однако я не нашел решения как избавится от вложенных циклов.
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Web_Master
Сообщения: 44
Зарегистрирован: 10 сен 2010 01:40

Re: MySQL и все с ним связанное

Сообщение Web_Master » 15 фев 2011 22:54

Garipov72 писал(а):Суть задачи: сделать большую вложенность категорий. (до 10)
В MySQL такая таблица: id (AI), title, id_root.
Id задается автоматом, title это как наверно понятно заголовок имеет текстовой вид, id_root - родительский элемент.

Конкретная задача, вывести скписок в option тегах, в зависимости от вложенности добавляется отступ.
создай таблицу с 11 полями:
  • 0 - id первичный
  • 1-10 пропишешь title , а их индекс в табице укажет на порядок вложенности
  • 11 - id_root здесь будешь указывать индекс родителя
получится своего рода дерево
1 1 1 1 1....
2 2 2 2 2....
. 1 1 1 1....
. 2 2 2 2...
. . 3 3 1...
. . 4 .и т д.

далее в скрипте извлекаешь таблицу перемещаещь в двумерный массив, чтобы не обращатся больше к mysql , запускаешь вложенные 10 циклов (как в том скрипте) типа for и печатаещь свой массив браузеру. В условиях будешь использовать только индексы id и id_root, поэтому php выполнит все это моментально + цыклы работают быстро. Кстати в этой задаче можно применить рекурсию, тогда код php сокраится до нильзя(предположу, что это будет около 10 граматных строк).

Аватара пользователя
Garipov72
webmaster
Сообщения: 2159
Зарегистрирован: 20 ноя 2009 16:16
Откуда: Москва

Re: MySQL и все с ним связанное

Сообщение Garipov72 » 15 фев 2011 23:27

Спасибо, посижу на досуге, просто с момента написания этой функции к скрипту более не возвращался, времени не было.
Я в nested sets пробовал разобратся но так и не смог выбрать время что бы нормально освоить.
Там где правила игры не позволяют выиграть, английские джентльмены меняют правила @ Гарольд Джозеф Ласки

Ответить