Skip to content
La2Base
Home
DownloadsWikiForumFAQ
Search
ruen
Sign up Login
HomeFilesWikiLogin
  • Home
  • Downloads
  • Wiki
  • FAQ
  • Contact Us
  • About
  • Rules
  • Privacy
  • Terms of Service

© 2026 la2base.com · All rights reserved

ruen
Forum/Web обвязка/[sql-запрос] с выводом на сайт
Search

[sql-запрос] с выводом на сайт

70 replies1,261 viewsCurrently viewing: 1
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/22/2009, 03:49 PM

Добрый вечер! Опять проблемы с моими знаниями 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

Прошу вашей помощи.

0
Дмитрий
Дмитрий

User

Ветеран

Posts: 834

На форуме с: 05/30/2007

Репутация: +632

Рейтинг: 0

· 03/22/2009, 04:00 PM

Конкатенацию строк ещё никто не отменял.

Код
$economy .= [результат выборки]
потом
Код
echo $economy;

WebDeveloper сервера DARKWORLD

0
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/22/2009, 05:13 PM

Не совсем Вас понял. По подробнее пожалуйста

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/22/2009, 05:21 PM

Если я правильно понял вопрос...

То вот:

Код
<p>
<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>


А если надо просто ограничить кол-во выводимых чаров, то

Код
$mysql=mysql_query("SELECT owner_id FROM items WHERE item_id=4408 ORDER BY owner_id DESC LIMIT 10", $link) or die('Cannot get information from databse.');


Где DESC LIMIT 10 - ограничивает результат до 10 человек.

На Форуме я тоже Radar!
Я везде Radar!

0
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/22/2009, 07:58 PM

<?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 и всё)
Кол-во денег: ХХХХХ

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/22/2009, 08:38 PM

Код
<?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'");
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']."&nbsp;&nbsp;&nbsp;";

$mysql=mysql_query("SELECT SUM(`count`) FROM `items` WHERE `item_id`='57'");
echo "<br>".mysql_result($mysql,0);


?>
</tr>
</table>
<hr>


Но я уверен что это наихудший вариант как твоей таблицы, так и запросов БД.

На Форуме я тоже Radar!
Я везде Radar!

0
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/22/2009, 08:46 PM

Спасибо, только немного вот так:
$mysql=mysql_query("SELECT * FROM characters, items WHERE characters.charid=
items.owner_id AND items.item_id = 4408");

А почему ты считаешь, что это худший?

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/22/2009, 09:06 PM

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

На Форуме я тоже Radar!
Я везде Radar!

0
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/22/2009, 09:13 PM

Все, что умею.
п.с. можешь посоветовать что-то почитать, чтобы не задавать таких вопрос простых?(как я сверху) мб. учебник какой-то по мускулу.

0
Дмитрий
Дмитрий

User

Ветеран

Posts: 834

На форуме с: 05/30/2007

Репутация: +632

Рейтинг: 0

· 03/22/2009, 09:31 PM

нечего вам делать ... разве нельзя одним махом выбрать несколько ID ? потом загнать их в массив и отсортировать по ID. С mysql вы намудрили ...

оптимизаторы блин :-)

SQL
SELECT * FROM characters, items WHERE (items.item_id = 4408 AND characters.charid=items.owner_id) OR (items.item_id = 1870 AND characters.charid=items.owner_id) OR (items.item_id = 57 AND characters.charid=items.owner_id) ORDER BY items.item_id DESC LIMIT 30


запрос конечно трёхэтажный, ну это уж лучше нежели 3 запроса ...

WebDeveloper сервера DARKWORLD

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/22/2009, 09:51 PM

Tatar: Все, что умею.
п.с. можешь посоветовать что-то почитать, чтобы не задавать таких вопрос простых?(как я сверху) мб. учебник какой-то по мускулу.


Я сам почти первый раз такое делаю))

Knokswille: оптимизаторы блин :-)


Я и не спорю))
А на оборот даже кричу о том что в SQL я не силен.

За то вот смотри как интересно получается:
Я увидел просьбу, взялся ее делать пока умные люди ищут ответ, сам там что-то колупался, добился нужного но сырого результата, выложил это дело, а меня потом исправили - где и в чем я был не прав!
Ну разве это не лучший способ для обучения?

А если бы кто-то сразу дал правильный ответ, я бы опять толком ничего не понял, а тут смотри я совсем не давно даже принципа построения подобного дела не знал, за то теперь...
Того гляди через несколько месяцев уже как орешки щелкать. Это же прекрасно))

На Форуме я тоже Radar!
Я везде Radar!

0
T
Tatar

User

Участник

Posts: 33

На форуме с: 03/25/2008

Репутация: +1

Рейтинг: 0

· 03/23/2009, 06:23 AM

Интересно.
А как еще добавить принадлежность к клану. Т.е. сейчас он у меня выдает такое:
Скрипт выглядит так:
<< $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']."&nbsp;&nbsp;&nbsp;"; >>
Заголово и т.д.
Уголь: 555
Кол-во акций: 250
Владелец: Tatar[Имя клана] Gorbun[Имя клана]
Кол-во денег: 123456
Ну и хотя бы чтобы между именами была точка с запяток или просто запятая.

Благодарю.

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/23/2009, 08:04 AM

Код
$mysql=mysql_query("SELECT * FROM characters,items WHERE characters.obj_id = items.owner_id AND items.item_id = 9432 ORDER BY char_name DESC LIMIT 10");
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!

0
Анатолий
Анатолий

User

Бывалый

Posts: 496

На форуме с: 11/19/2008

Репутация: +124

Рейтинг: 0

· 03/23/2009, 09:52 AM

Неплохой вариант для проверки наличия определенных вещей у игроков, как пример - палить раздачу крутых вещей ГМами или других вещей, полученных "левыми" путями (из-за неправильной настройки сервера, мобов, РБ и т.д.)...

— Random Post Generator

0
Дмитрий
Дмитрий

User

Ветеран

Posts: 834

На форуме с: 05/30/2007

Репутация: +632

Рейтинг: 0

· 03/23/2009, 10:32 AM

В таком случае, это лучше делать динамически, т.е. через

Код
$item_id = $_REQUEST['ident'];


script.php?ident=57
script.php?ident=4408
и т.д.

WebDeveloper сервера DARKWORLD

0
Анатолий
Анатолий

User

Бывалый

Posts: 496

На форуме с: 11/19/2008

Репутация: +124

Рейтинг: 0

· 03/23/2009, 11:37 AM

Radar
Хм, выводит не всех, почему-то... Работает, но список нааамного меньше, чем в варианте, предложенном Tatar'ом.

Гы, не заметил сразу DESC LIMIT 10 ))

— Random Post Generator

0
Руслан
Руслан

Moderator

Ветеран

Posts: 1201

На форуме с: 12/14/2007

Репутация: +775

Рейтинг: 0

· 03/23/2009, 12:10 PM

Knokswille: В таком случае, это лучше делать динамически, т.е. через
Код
$item_id = $_REQUEST['ident'];


script.php?ident=57
script.php?ident=4408
и т.д.


Объясни пожалуйста по подробней, не совсем понял (что? куда?)

На Форуме я тоже Radar!
Я везде Radar!

0
Анатолий
Анатолий

User

Бывалый

Posts: 496

На форуме с: 11/19/2008

Репутация: +124

Рейтинг: 0

· 03/23/2009, 12:16 PM

А как сделать, чтобы рядом с айди вещью выводилось само название ее из бд? И оно выбирало бы из 3-х баз: weapon, armor, etcitem ?

Radar
Очень просто там, в скрипт, в начало добавляешь это:

Код
$item_id = $_REQUEST['ident'];


Вместо айди итема ты вставляешь уже переменную:

Код
$mysql=mysql_query("SELECT * FROM characters,items WHERE characters.obj_id = items.owner_id AND items.item_id = [u][b]'$item_id'[/b][/u] ORDER BY char_name DESC LIMIT 10");
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

0
Дмитрий
Дмитрий

User

Ветеран

Posts: 834

На форуме с: 05/30/2007

Репутация: +632

Рейтинг: 0

· 03/23/2009, 12:22 PM

Radar: Объясни пожалуйста по подробней, не совсем понял (что? куда?)


напрмер URL этого топика:
la2base.ru/forum/index.php?showtopic=37620

если ты в конце введёшь другое число - попадёшь в другой топик, тепер понятно ?

P.S. А вы не пробовали посмотреть, сколько уходит времени на обработку запроса ???


Код
set_time_limit(10);

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

0
Анатолий
Анатолий

User

Бывалый

Posts: 496

На форуме с: 11/19/2008

Репутация: +124

Рейтинг: 0

· 03/23/2009, 12:27 PM

Чорт, подправьте теги в коде, забыл ))

— Random Post Generator

0
Topic is closed for replies