[sql-запрос] с выводом на сайт
Добрый вечер! Опять проблемы с моими знаниями Mysql. Написан скрипт для сайта вот он:
<?php
include("module/stat-menu.php");?>
<br><b><center>..:: Экономика ::..</center></b><br><hr>
<b>Процентное соотношение количества сырья:</b><br>
<p>
<table><tr><td><left>
Держатели итемов:
</left><br>
</td><td>
<?php
$mysql=mysql_query("SELECT owner_id FROM items WHERE item_id=4408");
if($mysql)
{
echo "".mysql_result($mysql,0);
}
?><br>
</td>
</tr>
</table>
<hr>
Всё конектится и работает. НО он выводит мне лишь ОДИН id персонажа, хотя их 3 штуки. (тех, у кого есть такие вещи итемы).
Второе: как соединить это, чтобы выводило имя персонажа а не его айди. (т.е. select name from characters where charid=????? результату предыдущего поиска)
Следовательно, должна выйти такое:
Держатели итемов: Tatar, Axilec, Onoim
Прошу вашей помощи.
Конкатенацию строк ещё никто не отменял.
WebDeveloper сервера DARKWORLD
Если я правильно понял вопрос...
То вот:
<table><tr><td><left>
Держатели итемов:
</left><br>
</td></tr>
<?php
include("module/stat-menu.php");
$mysql=mysql_query("SELECT owner_id FROM items WHERE item_id=4408", $link) or die('Cannot get information from databse.');
while ($economy = mysql_fetch_array($mysql))
echo "
<tr>
<td>".$economy['owner_id']."
<br>
</td>
</tr>";
mysql_close($link);
?>
</table>
<hr>
А если надо просто ограничить кол-во выводимых чаров, то
Где DESC LIMIT 10 - ограничивает результат до 10 человек.
На Форуме я тоже Radar!
Я везде Radar!
<?php
include("module/stat-menu.php");?>
<br><b><center>..:: Экономика ::..</center></b><br><hr>
<b>Процентное соотношение количества сырья:</b><br>
<p>
<table><tr><td><left>
Уголь:
</left><br>
Кол-во акций Уголь:
<br>
Владельцы:
<br>
Кол-во денег:
</td><td>
<?php
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='1870'");
if($mysql)
{
echo "".mysql_result($mysql,0);
}
?><br>
<?php
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='4408'");
if($mysql)
{
echo "".mysql_result($mysql,0);
}
?><br>
<?php
<<<Запрос>>>
?><br>
<?php
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='57'");
if($mysql)
{
echo "".mysql_result($mysql,0);
}
?>
</tr>
</table>
<hr>
------------------------
Тут несколько составляющих. Сперва отображается Уголь: 555 штук, затем кол-во акций: 250 штук.
А ВОТ тут уже нужен запрос на владельцев. Т.е. я не могу впихнуть сюда вот это: (select owner_id from items where item_id=4408; и вот это select name from characters where carId=)
На сайте должно быть так:
Заголово и т.д.
Уголь: 555
Кол-во акций: 250
Владелец: ИМЕНА владельцев (у меня он отображает ОДИН charId и всё)
Кол-во денег: ХХХХХ
include("module/stat-menu.php");?>
<br><b><center>..:: Экономика ::..</center></b><br><hr>
<b>Процентное соотношение количества сырья:</b><br>
<p>
<table><tr><td><left>
Уголь:
</left><br>
Кол-во акций Уголь:
<br>
Владельцы:
<br>
Кол-во денег:
</td><td>
<?php
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='1870'");
echo "".mysql_result($mysql,0)."<br />";
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='4408'");
echo "".mysql_result($mysql,0)."<br />";
$mysql=mysql_query("SELECT * FROM characters,items WHERE characters.obj_id = items.owner_id AND items.item_id = 4408");
while ($economy = mysql_fetch_array($mysql))
echo "".$economy['char_name']." ";
$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='57'");
echo "<br>".mysql_result($mysql,0);
?>
</tr>
</table>
<hr>
Но я уверен что это наихудший вариант как твоей таблицы, так и запросов БД.
На Форуме я тоже Radar!
Я везде Radar!
Спасибо, только немного вот так:
$mysql=mysql_query("SELECT * FROM characters, items WHERE characters.charid=
items.owner_id AND items.item_id = 4408");
А почему ты считаешь, что это худший?
Ну мне кажется визуально немного по другому надо построить, а то оно как то не дружелюбно смотрится.
На Форуме я тоже Radar!
Я везде Radar!
Все, что умею.
п.с. можешь посоветовать что-то почитать, чтобы не задавать таких вопрос простых?(как я сверху) мб. учебник какой-то по мускулу.
нечего вам делать ... разве нельзя одним махом выбрать несколько ID ? потом загнать их в массив и отсортировать по ID. С mysql вы намудрили ...
оптимизаторы блин :-)
запрос конечно трёхэтажный, ну это уж лучше нежели 3 запроса ...
WebDeveloper сервера DARKWORLD
Tatar: Все, что умею.
п.с. можешь посоветовать что-то почитать, чтобы не задавать таких вопрос простых?(как я сверху) мб. учебник какой-то по мускулу.
Я сам почти первый раз такое делаю))
Knokswille: оптимизаторы блин :-)
Я и не спорю))
А на оборот даже кричу о том что в SQL я не силен.
За то вот смотри как интересно получается:
Я увидел просьбу, взялся ее делать пока умные люди ищут ответ, сам там что-то колупался, добился нужного но сырого результата, выложил это дело, а меня потом исправили - где и в чем я был не прав!
Ну разве это не лучший способ для обучения?
А если бы кто-то сразу дал правильный ответ, я бы опять толком ничего не понял, а тут смотри я совсем не давно даже принципа построения подобного дела не знал, за то теперь...
Того гляди через несколько месяцев уже как орешки щелкать. Это же прекрасно))
На Форуме я тоже Radar!
Я везде Radar!
Интересно.
А как еще добавить принадлежность к клану. Т.е. сейчас он у меня выдает такое:
Скрипт выглядит так:
<< $mysql=mysql_query("SELECT characters.* FROM characters, items WHERE characters.charid= items.owner_id AND items.item_id = 4408");
while ($economy = mysql_fetch_array($mysql))
echo "".$economy['char_name']." "; >>
Заголово и т.д.
Уголь: 555
Кол-во акций: 250
Владелец: Tatar[Имя клана] Gorbun[Имя клана]
Кол-во денег: 123456
Ну и хотя бы чтобы между именами была точка с запяток или просто запятая.
Благодарю.
while ($economy = mysql_fetch_array($mysql))
{
$clan=mysql_fetch_array(mysql_query("select * from clan_data where clan_id=$economy[clanid]"));
if ($clan[clan_name]=='') { $clan[clan_name]="<font color=#FFFFFF>Без клана</font>"; }
echo "".$economy['char_name']." (".$clan['clan_name']."), ";
}
Выводит следующее:
Владелец: Tatar(Имя клана), Gorbun(Имя клана), ...
Только ИД измени
На Форуме я тоже Radar!
Я везде Radar!
Неплохой вариант для проверки наличия определенных вещей у игроков, как пример - палить раздачу крутых вещей ГМами или других вещей, полученных "левыми" путями (из-за неправильной настройки сервера, мобов, РБ и т.д.)...
— Random Post Generator
В таком случае, это лучше делать динамически, т.е. через
script.php?ident=57
script.php?ident=4408
и т.д.
WebDeveloper сервера DARKWORLD
Radar
Хм, выводит не всех, почему-то... Работает, но список нааамного меньше, чем в варианте, предложенном Tatar'ом.
Гы, не заметил сразу DESC LIMIT 10 ))
— Random Post Generator
Knokswille: В таком случае, это лучше делать динамически, т.е. черезКод$item_id = $_REQUEST['ident'];
script.php?ident=57
script.php?ident=4408
и т.д.
Объясни пожалуйста по подробней, не совсем понял (что? куда?)
На Форуме я тоже Radar!
Я везде Radar!
А как сделать, чтобы рядом с айди вещью выводилось само название ее из бд? И оно выбирало бы из 3-х баз: weapon, armor, etcitem ?
Radar
Очень просто там, в скрипт, в начало добавляешь это:
Вместо айди итема ты вставляешь уже переменную:
while ($economy = mysql_fetch_array($mysql))
{
$clan=mysql_fetch_array(mysql_query("select * from clan_data where clan_id=$economy[clanid]"));
if ($clan[clan_name]=='') { $clan[clan_name]="<font color=#FFFFFF>Без клана</font>"; }
echo "".$economy['char_name']." (".$clan['clan_name']."), ";
}
И добавляя к ссылке вида script.php?ident= айди предмета, то ты передаешь айди скрипту в переменную $item_id. Естественно, что script.php - это имя вашего файла со скриптом. Да и ident - это просто тоже переменная, ты ее можешь заменить на любую.
— Random Post Generator
Radar: Объясни пожалуйста по подробней, не совсем понял (что? куда?)
напрмер URL этого топика:
la2base.ru/forum/index.php?showtopic=37620
если ты в конце введёшь другое число - попадёшь в другой топик, тепер понятно ?
P.S. А вы не пробовали посмотреть, сколько уходит времени на обработку запроса ???
class timer
{
var $start_time;
function get_time()
{
list($usec, $seconds) = explode(" ", microtime());
return ((float)$usec + (float)$seconds);
}
function start_timer()
{
$this->start_time = $this->get_time();
}
function end_timer()
{
return ($this->get_time() - $this->start_time);
}
}
$timer = new timer();
$timer->start_timer();
ВЕСЬ КОД СКРИПТА, ВЫВОД И Т.П.
$webTime = $timer->end_timer();
$webTime = round($webTime, 2);
$status .="на обработку затрачено $webTime сек.<br>";
echo $status;
WebDeveloper сервера DARKWORLD



