[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывод с 3х базз
ak_lucky_47
Здравствуйте ! подскажите плз !
есть 3 одинаковые базы но с одинаковыми таблицами и тд!
(база отвечает за проводимое время в игре)
как можно сделать чтоб с 3х баз выводилось самое большое количество игравших по времени !
мне обьяснили так
1. создать 3 запроса в каждую из баз.
2. выбрать ими самых-самых.
3. слить массивы
4. Отсортировать по ключу времени.

я сделал так !

<?
$con = mysql_connect("$sqlhost", "$sqluser", "$sqlpass") or die(mysql_error());

mysql_select_db($db_chars_one) or die(mysql_error());
$resurs_one = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_two) or die(mysql_error());
$resurs_two = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_thr) or die(mysql_error());
$resurs_two = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

echo "";
while($rows = mysql_fetch_object($resurs_thr , $resurs_two , $resurs_one))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";
?>




Спустя 54 минуты, 18 секунд (13.03.2011 - 22:31) imbalance_hero написал(а):
$resurs_two - дважды! отсюда баг.

Спустя 2 минуты, 13 секунд (13.03.2011 - 22:33) ak_lucky_47 написал(а):
нет из за этого не было исправил все равно выдает ошибку
Warning: mysql_fetch_object() expects parameter 2 to be string, resource given in C:\VertrigoServ\www\include\modules\right\info.php on line 33
<?
$con = mysql_connect("$sqlhost", "$sqluser", "$sqlpass") or die(mysql_error());

mysql_select_db($db_chars_one) or die(mysql_error());
$resurs_one = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_two) or die(mysql_error());
$resurs_two = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_thr) or die(mysql_error());
$resurs_thr = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

echo "";
while($rows = mysql_fetch_object($resurs_thr , $resurs_two , $resurs_one))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";
?>

Спустя 5 минут, 59 секунд (13.03.2011 - 22:39) sergeiss написал(а):
Цитата (ak_lucky_47 @ 13.03.2011 - 23:33)
while($rows = mysql_fetch_object($resurs_thr , $resurs_two , $resurs_one))

А ты не пробовал посмотреть ВНИМАТЕЛЬНО на параметры этой функции, mysql_fetch_object? wink.gif

И еще. Не пиши столько восклицательных знаков в тексте... Это в интернете воспринимается как крик.

Затем. А ты не можешь все таблицы содержать в одну БД? Все запросы станут НАМНОГО проще. А еще лучше, если все однотипные данные будут содержаться в одних и тех же таблицах и будут разделяться по какому-то параметру.

Спустя 3 минуты, 58 секунд (13.03.2011 - 22:43) ak_lucky_47 написал(а):
sergeiss вот именно что в 3х базах содержатся разная инфа которую нажо обработать и выявить самые максимальные результаты и в лимит из 5 строк
а по поводу
while($rows = mysql_fetch_object($resurs_thr , $resurs_two , $resurs_one))

то я вижу текст так как я ещё только учу php

Спустя 10 минут, 30 секунд (13.03.2011 - 22:54) sharki написал(а):
ak_lucky_47
Тебе же сказали прочесть про эту функцию и её параметры(в твоем случае не правильно), в твоем случае вызови 3 раза эту функцию..для каждой базы, и потом обработай результаты

Спустя 5 минут, 6 секунд (13.03.2011 - 22:59) ak_lucky_47 написал(а):
sharkiя же говорю что только учу php
я сделал так!но выводит только из базы thr

<?
$con = mysql_connect("$sqlhost", "$sqluser", "$sqlpass") or die(mysql_error());

mysql_select_db($db_chars_one) or die(mysql_error());
$resurs_one = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_two) or die(mysql_error());
$resurs_two = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_thr) or die(mysql_error());
$resurs_thr = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

echo "";
while($rows = mysql_fetch_object($resurs_one))
while($rows = mysql_fetch_object($resurs_two))
while($rows = mysql_fetch_object($resurs_thr))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";
?>

Спустя 3 минуты, 46 секунд (13.03.2011 - 23:03) sharki написал(а):
ak_lucky_47
Учи основы, и погугли операторы циклов
Для каждого оператора имеется "функциональный блок" который будет выполняться при каждой итерации
while($rows = mysql_fetch_object($resurs_one))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";

while($rows = mysql_fetch_object($resurs_two))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";

while($rows = mysql_fetch_object($resurs_thr))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";

Спустя 4 минуты, 47 секунд (13.03.2011 - 23:07) neadekvat написал(а):
sharki, в этом плане у автора все было нормально.
Проблема была совершенно в другом - вывод информации был реализован в последнем цикле, который и был сделал на первой итерации первого и второй цикла. Затем выводить было просто нечего.
Если бы это был не вывод из базы, то, повторюсь, там все нормально.

А вот что тут делать - видимо, спасут только доп.массивы.

Спустя 1 минута, 1 секунда (13.03.2011 - 23:08) ak_lucky_47 написал(а):
sharkiты не читал мой 1 пост?

Спустя 5 минут, 44 секунды (13.03.2011 - 23:14) ak_lucky_47 написал(а):
обьясню ещё раз
есть 3 базы
есть одинаковые таблицы с разной инфой!
нужно отсортировать из 3х баз самое большое количество времени проведенное в игре таблица totaltime

Спустя 2 минуты, 56 секунд (13.03.2011 - 23:17) neadekvat написал(а):
Цитата (ak_lucky_47 @ 13.03.2011 - 18:37)
мне обьяснили так
1. создать 3 запроса в каждую из баз.
2. выбрать ими самых-самых.
3. слить массивы
4. Отсортировать по ключу времени.

Вот же, у вас алгоритм есть..
sharki разбил вам на три запроса. Т.е. пункт один выполнен.

Спустя 2 минуты, 11 секунд (13.03.2011 - 23:19) Invis1ble написал(а):
ak_lucky_47
Еще раз: у тебя три вложенных цикла, и на каждой итерации каждого из них переменной $rows присваивается новый объект, затирая тем самым предыдущие данные. Тебе нужно использовать каждый цикл потдельности, примерно как sharki написал

Спустя 4 минуты, 57 секунд (13.03.2011 - 23:24) ak_lucky_47 написал(а):
Invis1ble епрст ваш прогро слэнг я ели понимаю!
ну вот получается так

<?
$con = mysql_connect("$sqlhost", "$sqluser", "$sqlpass") or die(mysql_error());

mysql_select_db($db_chars_one) or die(mysql_error());
$resurs_one = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_two) or die(mysql_error());
$resurs_two = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");

mysql_select_db($db_chars_thr) or die(mysql_error());
$resurs_thr = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");



while($rows = mysql_fetch_object($resurs_one))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "$name $days $hours $min ";
}

while($rows = mysql_fetch_object($resurs_two))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "$name $days $hours $min ";
}

while($rows = mysql_fetch_object($resurs_thr))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "$name $days $hours $min ";
}
?>

но а как теперь их отсортировать по времени в таблицу из 5 строк?
т.е
имя время
имя время
имя время
имя время
имя время
конец

Спустя 2 минуты, 13 секунд (13.03.2011 - 23:26) sergeiss написал(а):
Цитата (ak_lucky_47 @ 14.03.2011 - 00:14)
обьясню ещё раз
есть 3 базы
есть одинаковые таблицы с разной инфой!

А ты не ответил на мой вопрос
Цитата (sergeiss @ 13.03.2011 - 23:39)
А ты не можешь все таблицы содержать в одной БД? Все запросы станут НАМНОГО проще.


Если ты все данные разместишь в одной БД, то всё будет НАМНОГО ПРОЩЕ!!!!!

Я вот, например, так и не понял: зачем у тебя 3 БД используются? Скорее всего потому, что ты не совсем правильно понимаешь, как с БД работать.
Вот я тебе и предлагаю сказать, что и зачем ты хочешь сделать, чтобы подсказать оптимальное решение. Ты же вместо этого продолжаешь углубляться в дебри...

Спустя 3 минуты, 17 секунд (13.03.2011 - 23:30) ak_lucky_47 написал(а):
sergeiss
обьясню так как я привык !
у меня игровой сервер !
где 3 игровых мира где хранятся данные о персонажах и тд
я не могу хранить всх персонажей в 1 базе так как будет сплошной переварот

Спустя 50 секунд (13.03.2011 - 23:31) Invis1ble написал(а):
ak_lucky_47
Цитата
ваш прогро слэнг

там нет никакого сленга. Итерация, цикл, переменная, объект - это базовые понятия в программировании.

Спустя 54 секунды (13.03.2011 - 23:31) ak_lucky_47 написал(а):
Invis1ble
да я на программиста не поступил не набрал 10 балов из 60 и учусь на повара!

Спустя 3 минуты, 26 секунд (13.03.2011 - 23:35) imbalance_hero написал(а):
ak_lucky_47
А учишься, я уверен, по книжке? Неужели не запоминаешь слов, которые там написаны?

Спустя 59 секунд (13.03.2011 - 23:36) ak_lucky_47 написал(а):
imbalance_hero
в данный момент не читаю пишу дипломку пока а делаю все на практике

Спустя 52 секунды (13.03.2011 - 23:37) neadekvat написал(а):
Цитата (ak_lucky_47 @ 13.03.2011 - 20:31)
да я на программиста не поступил не набрал 10 балов из 60 и учусь на повара!

Эту задачу действительно невомзожно решить, если не знать основ.
Более того, если не знать основ, то вообще сложно задачу, которую решить возможно.

Вы хотите, чтобы мы сделали за вас?

Дипломку куда пишите? Разве такое поварам задают?

Цитата (imbalance_hero @ 13.03.2011 - 20:35)
А учишься, я уверен, по книжке? Неужели не запоминаешь слов, которые там написаны?

Что-то мне подсказывает, что автор вообще не встречал этих слов ранее.. к сожалению..

Спустя 1 минута, 41 секунда (13.03.2011 - 23:38) ak_lucky_47 написал(а):
neadekvat
да задают я не в России учусь, я не прошу вас сделать все за меня хотя класное предложение))) но нет я прошу вас обьяснить мне

Спустя 3 минуты, 5 секунд (13.03.2011 - 23:41) imbalance_hero написал(а):
ak_lucky_47
Позвольте не обидеть Вас, но Вы должно быть весёлый парень! Учась на повара писать диплом на PHP с игровыми персонажами =)

Создай всё в одной таблице, расделение сделай конкретно по колонке (`world`), где 1 - первый, 2 - второй, 3 - третий. Вообще всё просто станет. Если нет, то каждое из данный отправляй в массив, получится здоровый общий массив, и тогда уже сортируй именно его.

Спустя 1 минута, 33 секунды (13.03.2011 - 23:43) ak_lucky_47 написал(а):
imbalance_hero
сколько можно повторять что в 1 таблице не получится сделать!

Спустя 54 секунды (13.03.2011 - 23:44) Invis1ble написал(а):
Тебе объяснили уже, что хранить однотипные данные в разных БД - это извращение, чревато необоснованным разрастанием объема кода. Почему бы тебе не хранить все в одной БД, при этом указывая к какому игровому миру относится запись?

Спустя 1 минута, 37 секунд (13.03.2011 - 23:46) imbalance_hero написал(а):
ak_lucky_47
Что значит неполучится? Берёшь ручками и делаешь. Тебе об этом говорят и эксперты, и я!

Спустя 1 минута, 52 секунды (13.03.2011 - 23:47) ak_lucky_47 написал(а):
у меня мозг щас взорвется мне кажется что вы меня не правильно поняли!
вот смотрите вот скрипт для 1 базы

<?
$con = mysql_connect("$sqlhost", "$sqluser", "$sqlpass") or die(mysql_error());
mysql_select_db($db_chars_one) or die(mysql_error());
$resurs = mysql_query(" SELECT `name`, `totaltime` FROM `characters` ORDER BY `totaltime` DESC LIMIT 0 , 10 ");
echo "";
while($rows = mysql_fetch_object($resurs))
{
$name = $rows->name;
$time = $rows->totaltime;
$time = intval ($time/60);
$min = $time%60;
$time = intval ($time/60);
$hours = $time%24;
$time = intval($time/24);
$days = $time;
echo "<tr><td><center>",$name,"</center></td><td><center>",$days,"д ",$hours,"ч ",$min,"м</center></td></tr>";
}
echo "</table>";
?>

Спустя 1 минута, 16 секунд (13.03.2011 - 23:49) neadekvat написал(а):
Invis1ble, мне кажется, для разных баз данных могут быть основания при построении архитектуры какой-нибудь онлайн игрушки. Однако если архитектуру делал автор, то, пожалуй, ему стоит рассказать нам в целом о ней: возможно, мы предложим что-то лучшее, тем более, что, скорее всего, с реляционной формой ТС не знаком. А во-вторых, сказать, сколько кода уже завязано на этом решении.

Спустя 3 минуты, 10 секунд (13.03.2011 - 23:52) ak_lucky_47 написал(а):
вот вам структура моей базы
сдесь все понятно написано
http://www.trinitycore.org/w/DB:Characters

Спустя 49 секунд (13.03.2011 - 23:53) imbalance_hero написал(а):
ak_lucky_47
Добавь в запрос WHERE `world` = 1 , и получишь то, что я тебе предлагаю. Всё в одну таблицу, разделение лишь по одному критерию, по одной колонке. Объясни логически, чем такой вариант тебе не подходит?

neadekvat
Думаешь, ТС мог построить очень много с такими знаниями? Лучше уж сейчас исправить и сделать правильно, чем убивать ему время на извраты с несколькими таблицами.

Спустя 3 минуты, 2 секунды (13.03.2011 - 23:56) Invis1ble написал(а):
neadekvat
Цитата
для разных баз данных могут быть основания

конечно. Однако, сдается мне (на основании фразы из первого поста "есть 3 одинаковые базы"), что те 3 БД по архитектуре практически не отличаются друг от друга. Исходя из этого, я предложил, на мой взгляд оптимальное решение

Спустя 1 минута, 18 секунд (13.03.2011 - 23:57) neadekvat написал(а):
Цитата (imbalance_hero @ 13.03.2011 - 20:53)
Думаешь, ТС мог построить очень много с такими знаниями?

Нет, я думаю как раз иначе, что и доказал чуть выше ТС: это он сделал не сам, а взял готовое. С его уровнем знаний, увы, ни о каких подобных изменениях структуры идти речь.. мм.. С другой стороны, если кто-то готов убить вагон и маленьку тачку своего времени, то..

ak_lucky_47, вы пытаетесь построить небоскреб, не умея строить и сарай. Вы уверены в своем выборе?

Спустя 2 минуты, 32 секунды (14.03.2011 - 00:00) ak_lucky_47 написал(а):
ладно спасибо всем за помощь кроме критики я сдесь не чего не увидел!
спс конечно sharki за помощь!
всем большая благодарность!

Спустя 1 минута, 55 секунд (14.03.2011 - 00:01) Invis1ble написал(а):
Цитата
вы пытаетесь построить небоскреб, не умея строить и сарай

+1

ak_lucky_47
Пойми, никто не будет ковыряться в огромном коде за тебя бесплатно. Если хочешь сделать что-то конкретно - учись.
Советы с циклами тебе дали, sharki даже примерчик набросал

Спустя 2 минуты, 19 секунд (14.03.2011 - 00:04) ak_lucky_47 написал(а):
Invis1ble да тут все понятно!
когда мировая сеть только появилась все старались как то помочь друг другу,а
сейчас только деньги и тут все понятно!

Спустя 53 секунды (14.03.2011 - 00:05) ak_lucky_47 написал(а):
код тут не огромный ! стоит только вывести время из 3х баз и отсортировать их
и все а вы строите небоскребы!

Спустя 1 минута, 1 секунда (14.03.2011 - 00:06) Invis1ble написал(а):
ak_lucky_47
Есть бесплатные курсы, иди учись. Без труда, как говорится...

Спустя 15 секунд (14.03.2011 - 00:06) neadekvat написал(а):
ak_lucky_47, так мы и рады помочь. Но в чем мы можем помочь вам, скажите? У нас только два варианта: либо написать за вас, либо не написать.
Учите основы, чтобы было кому и в чем помогать.

И если это так легко - так почему вы не можете это сделать? А если вы не знаете, как, то разве у вас есть право утверждать, что это легко?

Спустя 1 минута, 44 секунды (14.03.2011 - 00:08) ak_lucky_47 написал(а):
neadekvat
все понятно я ещё раз повторю!тему можно в корзину

Спустя 8 минут, 55 секунд (14.03.2011 - 00:17) sergeiss написал(а):
Короче, я всё понял... Автор темы нифига в ПХП не разбирается, но учиться не хочет. Любой совет, связанный с изменением структуры, воспринимает как личное оскорбление. Изучать БД не хочет, советы по оптимизации БД воспринимает "в штыки".

Посему тему закрываю. Если у автора будет желание что-то изучать, то пусть создаст новую тему. Но только чтобы при этом было желание понимать то, что ему отвечают и чтобы было желание учиться. А также делать и переделывать до тех пор, пока не получится что-то более-менее нормальное.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.