Autor | Zpráva | ||
---|---|---|---|
kimmy Profil * |
#1 · Zasláno: 22. 12. 2008, 13:09:38
Ahoj,
prosím mohl by mi někdo poradit, jak jinak zapsat toto, aby to fungovalo?: $query = mysql_query("SELECT ... atd "); $query3 = mysql_query("SELECT ... atd "); while ($row = mysql_fetch_array($query)) { echo '<table border="1" width="25%" align="left">'; echo '<tr><th class="center" height="20px">'.$row['nazev'].'</th></tr>'; $zobraz_img='<img src="'.__SITE_URL__.__URL__.'img_produkty/male/'.$row['image'].'" alt="'.$row['nazev'].'" />'; echo '<tr><td height="150px" class="center">'.$zobraz_img.'</td></tr>'; while ($row3 = mysql_fetch_array($query3)) { if ($row['id'] == $row3['id']) echo '<tr><td height="20px" class="center">'.$row3['nazev_hodnoty'].'</td></tr>'; } echo '</table>'; } Vím, že tam vadí to, že volám mysql_fetch_array podruhé (protože je v cyklu prvního mysql_fetch_array) a on už se podruhé nevykoná, ale jak jinak to lze řešit? Ten řádek $row3['nazev_hodnoty'] mi to tím pádem vypíše pouze v první tabulce a v dalších už ne.. Nevíte někdo jak na to? Děkuju |
||
Alphard Profil |
#2 · Zasláno: 22. 12. 2008, 13:25:06
nepomohlo by mysql_data_seek()?
|
||
bohyn Profil |
#3 · Zasláno: 22. 12. 2008, 13:25:31
kimmy
Volat na zacatku nebo na konci prvniho while mysql_data_seek($query3, 0); - Kdyz chces jen asociovane pole pouzivej mysql_fetch_assoc() - je to o fous rychlejsi a mene pametove narocne. - Neni pekne deklarovat konstanty zacinajici "__" - mely by byt vyhrazeny pro PHP. |
||
kimmy Profil * |
#4 · Zasláno: 22. 12. 2008, 13:43:07
děkuji za rady.. mysql_data_seek($query3, 0); mi vyhodí hlášku Warning: mysql_data_seek(): Offset 0 is invalid for MySQL result index 13 (or the query data is unbuffered) in... Dívala jsem se do manuálu PHP a zkoušela tu chybu vyhledat v nějaké diskuzi, ale ani tady, ani jinde jsem nenašla nic, co by mi pomohlo.. Nevíte, prosím, co to znamená?
|
||
kimmy Profil * |
#5 · Zasláno: 22. 12. 2008, 13:46:20
A nemůžu to udělat třeba takto? Takto mi to funguje:
$query = mysql_query("SELECT ... atd "); while ($row = mysql_fetch_array($query)) { echo '<table border="1" width="25%" align="left">'; echo '<tr><th class="center" height="20px">'.$row['nazev'].'</th></tr>'; $zobraz_img='<img src="'.__SITE_URL__.__URL__.'img_produkty/male/'.$row['image'].'" alt="'.$row['nazev'].'" />'; echo '<tr><td height="150px" class="center">'.$zobraz_img.'</td></tr>'; $query3 = mysql_query("SELECT ... atd "); while ($row3 = mysql_fetch_array($query3)) { if ($row['id'] == $row3['id']) echo '<tr><td height="20px" class="center">'.$row3['nazev_hodnoty'].'</td></tr>'; } echo '</table>'; } Jen nevím jestli to nebude paměťově moc náročné.. |
||
tiso Profil |
#6 · Zasláno: 22. 12. 2008, 13:48:20
kimmy - môžeš, ale zbytočne to riešiš takto, naštuduj si spájanie (JOIN) tabuliek, a vyberieš to jedným dotazom.
|
||
bohyn Profil |
#7 · Zasláno: 22. 12. 2008, 13:51:48
kimmy
Mohlo by to delat kdyz je vysledek dotazu prazdny, viz. PHP manual row_number starts at 0. The row_number should be a value in the range from 0 to mysql_num_rows() - 1. However if the result set is empty (mysql_num_rows() == 0), a seek to 0 will fail with a E_WARNING and mysql_data_seek() will return FALSE. |
||
kimmy Profil * |
#8 · Zasláno: 22. 12. 2008, 13:59:06
tiso
Já to řeším pomocí JOIN, ty dotazy vypadají takto: $query = mysql_query(" SELECT DISTINCT p.id AS id, m.$nazev AS nazev, f.file AS image, sp.$nazev AS nazev_polozky FROM produkty p JOIN produkty_matky m ON p.id_matka=m.id_matka LEFT JOIN produkty_foto f ON f.id_produkt=p.id AND f.razeni=0 LEFT JOIN sablony_obsah so ON so.id_produkt = p.id LEFT JOIN sablony_polozky sp ON sp.id_polozka = so.id_polozka LEFT JOIN sablony_seznam ss ON ss.id_sablona = sp.id_sablona LEFT JOIN sablony_hodnoty sh ON sh.id_hodnota = so.id_hodnota WHERE m.web='".__WEB__."' AND p.id IN (".implode(", ", $_SESSION['porovnani']).") GROUP BY p.id ORDER BY p.id ") or die(err(1)); $query3 = mysql_query(" SELECT p.id AS id, sp.id_polozka AS id_polozky, sh.$nazev AS nazev_hodnoty FROM produkty p JOIN produkty_matky m ON p.id_matka=m.id_matka LEFT JOIN sablony_obsah so ON so.id_produkt = p.id LEFT JOIN sablony_polozky sp ON sp.id_polozka = so.id_polozka LEFT JOIN sablony_seznam ss ON ss.id_sablona = sp.id_sablona LEFT JOIN sablony_hodnoty sh ON sh.id_hodnota = so.id_hodnota WHERE m.web='".__WEB__."' AND p.id = '".$row['id']."' ORDER BY sp.id_polozka ") or die(err(1)); Akorát že jednou potřebuju mít v dotazu GROUP BY p.id, a podruhé ne. |
||
Smokie Profil |
#9 · Zasláno: 22. 12. 2008, 15:31:05 · Upravil/a: Smokie
Možná že vím co potřebuješ : zkus to zapsat takhle :
while ($row = mysql_fetch_array($query) and $row3 = mysql_fetch_array($query3)) //Vypsání do prohlížeče ... |
||
tiso Profil |
#10 · Zasláno: 22. 12. 2008, 15:37:05 · Upravil/a: tiso
kimmy - pekná divočina...
$query: Potrebuješ niekde sp.$nazev AS nazev_polozky? Ak nie, tak ti stačí spojiť prvé 3 tabuľky, inak prvých 5. Posledné 2 tam sú úplne zbytočné, nevraciaš z nich žiadne dáta. $query3: stačilo by ti spájať až šablónové tabuľky a miesto where p.id=... tam daj where so.id_produkt=... Ale toto fakt ide spraviť jedným dotazom, s tým že si hlavičku tabuľky vypíšeš len raz pri prvom pirechode cyklom, a ostatné riadky toľkokrát, koľko máš riadkov: while(...){ if(!isset($first){ //vypis zahlavie $first='no'; } //vypis riadok tabulky } |
||
kimmy Profil * |
#11 · Zasláno: 22. 12. 2008, 20:52:43
tiso
Myslíš, že by celé porovnávání produktů šlo vyřešit jedním dotazem? Já mám 3 ($query, $query2, $query3). Pomocí prvního vytáhnu pouze názvy výrobků a obrázky, pomocí druhého názvy položek pro porovnávání (velikost, barv, ...a) a pomocí třetího jednotlivé hodnoty porovnávaných položek (malá, modrá, ...). Ještě se mi nepodařilo zkombinovat to tak, aby mi stačil jen jeden dotaz, ale aby mi vytáhl vše potřebné a aby to pak šlo pěkně nacpat do nějaké tabulky. V tom případě, který mám teď, mi to vypisuje zvlášť tabulku pro položky pro porovnávání a za to několik tabulek, pro každý produkt jednu.. Vypadá to třeba takto: ukázka Ale problém je v tom, že to pod obrázky produktů vypíše všechny hodnoty nezávisle na první tabulce s položkama. A pak mám například v řádku VELIKOST hodnotu SLADKÉ. Nemohl bys mi s tím, moc prosím, trochu pomoct? Já už se nad tím trápím asi 4. den :-( |
||
tiso Profil |
#12 · Zasláno: 22. 12. 2008, 21:31:07
kimmy - ťažko radiť, keď neviem aké presne máš tabuľky, čo obsahujú, a čo to vlastne celé s nimi robíš a chceš robiť... Ak máš ICQ, tak ho sem napíš, alebo ma kontaktuj cez stránku v mojom profile.
|
||
kimmy Profil * |
#13 · Zasláno: 22. 12. 2008, 23:00:27
tiso
moje icq je 199-256-580, ale nechci Tě nějak moc zdržovat.. |
||
Časová prodleva: 15 let
|
0