Autor Zpráva
Fisak
Profil
Dobrý den. Mám kód který mi vypisuje data url obrázku z db.. dal by se tento kód změnit tak abych se nemusel 180x dotazovat na db?
<?php
for ($y = -5; $y <= 5; $y++) {

for ($x = -9; $x <= 9; $x++) {


$map_textures_sql = DB::query("SELECT [img_id] FROM [ch_map] where [position_x] = %i", $x, "and [position_y] = %i", $y, " and [position_z] = %i", $row_textures->position_z);
      
$row_position = DB::query("SELECT [url_img] FROM [ch_map_img] where [id] = %i", $map_textures_sql->fetchSingle('img_id'));
      
echo $row_position->fetchSingle('url_img');

    
}

}
Předem děkuji za všechny odpovědi.
Chuchycek
Profil
Dobrý,
předpokládám, že máš v databázi ty souřadnice x a y přesně v rozmezí (-5,5) a (-9,9), popř. přidat podmínku where, kde budou tyto hodnoty v tomto rozmezí, tak nestačilo by využít seřazení ORDER BY position_x ASC, position_y ASC a pak využít cyklus while pro následný vypis url obrázku s využitím vnořeného dotazu?
Fisak
Profil
no zkusil jsem tento dotaz.. ovšem nefunguje to :-/
<?php
$uss_textures_sql = DB::query("SELECT * FROM [ch_users_characters] where [id] = %i", "1", "%lmt", "1")->fetchAll();
foreach ($uss_textures_sql as $n => $row_textures) {

$border_top = $row_textures->position_y - 9;
$border_bottom = $row_textures->position_y + 9;
$border_left = $row_textures->position_x - 5;
$border_right = $row_textures->position_x + 5;

$map_textures = DB::query("SELECT [url_img] FROM [ch_map_img] where [id] = %i", "(SELECT [img_id] FROM [ch_map] where [position_z] = ".$row_textures->position_z." and [position_y] <= ".$border_bottom." and [position_y] >= ".$border_top." and [position_x] <= ".$border_right." and [position_x] >= ".$border_left.")")->fetchAll();
foreach ($map_textures as $n => $row_map_txt) {

echo $row_map_txt->url_img."<br>";

}
}
Chuchycek
Profil
To vypadá spíš jen na syntaktickou chybu (vrací to nějakou)?
    $map_textures = implode(",", DB::query("SELECT [img_id] FROM [ch_map] where [position_z] = " . $row_textures->position_z . " and (([position_y] BETWEEN " . $border_bottom . " AND " . $border_top . ") and ([position_x] BETWEEN " . $border_right . " AND " . $border_left . "))")->fetchAll());
    $row_position = DB::query("SELECT [url_img] FROM [ch_map_img] where [id] = (%i)", $map_textures)->fetchAll();
    foreach ($row_position as $n => $row_map_txt) {

        echo $row_map_txt->url_img . "<br>";
    }
peta
Profil
Fisak: Jestli to spravne chapu, tak ten komplikovany dotaz napsany jskous hatmatilkou vytahne vsechny id mezi souradnicemi a pak podle id dohleda obrazky. Pokud je ale pocet id vetsi nez 1, pak [id] = %i" se v mysql pise id IN (1,2,3,4,5) a ne id = (1,2,3,4,5)
Ucite mas zapnute error_reporting a nebo mysql_error pro ten objekt DB:: ? Melo by to vyhoit chybu.
Fisak
Profil
Chuchycek:
DB::test(..) bohužel nic nevypíše. Ten muj dotaz je dobře jenže se do té podmínky nevypíše řetězec ideček bych řekl... co něo takového

DB::test("SELECT [img_id] AS vysledek FROM [ch_map] where [position_z] = %i", $row_textures->position_z, " and [position_y] <= %i", $border_bottom, " and [position_y] >= i%", $border_top," and [position_x] <= %i", $border_right, " and [position_x] >= %i", $border_left, " LEFT JOIN [ch_map_img] where [id] = %i", "vysledek"); (DB:test = zkouším testovat dotazy)


peta:
Ta hatmatilka je zápis u DIBI ... viz. http://dibiphp.com/
Lamicz
Profil
[position_y] >= i%

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: