Autor Zpráva
leonek
Profil
Ahojte

Podle příspěvku z PHP manuálu jsem vytvořil kod níže, ale vzhledem k tomu, že výstup je typu "resource" a ne array tak to nefunguje.

Jde mi o to, že potřebuji vědět, jestli se id vyskytuje mezi vyhledanými řádkami ještě před zpracováním. A také se snažím vyhnout dalšímu sql dotazu.

$nacist = mysql_query("SELECT * FROM tabulka WHERE neco=1");
$idcook = array_search($this->id, array_column($nacist, 'id'));
while ($n = mysql_fetch_array($nacist)){
      if($idcook == FALSE)$this->id=$n['id'];
      ...
}
Alphard
Profil
Takhle to nepůjde, kvůli tebou popsanému důvodu.
Je třeba projít ty výsledky 2x, tj. jeden cyklus, vrátit se na začátek pomocí mysql_data_seek() a pak samotné zpracování.
Nebo použít pro přístup k db nějakou vrstvu, která vrátí přímo pole. mysql extenze je již stejně odepsaná...
tpmar
Profil
leonek:
Jestli jsem to špatně pochopil tak se potom omlouvám za příspěvek ale nestačil by SQL dotaz upravit následovně?
"SELECT * FROM tabulka WHERE neco=1 AND id = " . $this->id

A pak jen kontrolovat, jestli ti to vrací výsledek.
leonek
Profil
tpmar:
To právě nejde protože potřebuji všechna data do <select> a označit ten první pokud se IDéčko, které je uložené v $_COOKIE['doprava'] nevyskytuje mezi vrácenými řádkami.

Alphard:
Nedalo by se tomu vyhnout třeba nějakým složeným výrazem (které mi vůbec nejdou):
mysql_query("SELECT *, (SELECT id FROM tabulka WHERE neco=1) as idecka FROM tabulka WHERE neco=1")
Alphard
Profil
leonek [#4]:
V principu ano, ale já to cítím jako dost velký workaround. Komplikuje to dotaz, přehlednost, zanáší to nedůležité závislosti a tak...
Vždyť projít 2x vrácenou sadu výsledků je triviální. Za minutu by to bylo napsané.
leonek
Profil
Alphard:
Triviální to je... Jde mi jen o to, že tento skript se spouští velmi často a chtěl bych aby byl co možná nejrychlejší. Otázkou tedy je: bude 2x while rychlejší než dva SELECTy když předpokládáný počet výsledků je do 10 (slovy deset :D)?
Alphard
Profil
Jeden cyklus navíc s cca deseti iteracemi vůbec nepůjde poznat.

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:

0