| 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: 17 let
|
|||
0