Autor | Zpráva | ||
---|---|---|---|
Ovladač Profil * |
#1 · Zasláno: 20. 5. 2007, 23:22:03
mám dva dotazy, z nich získávám data...jedny data ukazuju pomocí while
potřeboval aby při každým výpisu $row2[1] zkontroloval s druhým dotazem - tedy polem něco vy smyslu tohodle $select1 = mysql_query("SELECT * FROM `tabulka1`"); $row1 = mysql_fetch_row($select1); $select2 = mysql_query("SELECT * FROM `tabulka2`"); while($row2 = mysql_fetch_row($select2); { if( $row1[1] == $row2[1]) { echo $row1[1]."ahoj"; } else { echo $row2[3]; } } problém je že než načte druhý řádek, musí v tom prvním proměnnou s druhýho dotazu projít, pak půjde na druhý řádek a ten taky projde se všema polema z prvního dotazu...zkoušel jsem i foreach
jenže vypíše oboje, jak první podmínku tak i druhou, nevím se tím rady...pokud by byly otázky budu teď tak hodinu ještě na foru refresovat a odpovídat na jakýkoliv dotazy:-) |
||
YoSarin Profil |
#2 · Zasláno: 20. 5. 2007, 23:26:20
co je cílem? Mám takový pocit, že tohle by šlo zařídit přímo v SQL dotazu...
|
||
Ovladač Profil * |
#3 · Zasláno: 20. 5. 2007, 23:29:31
cílem je zobrazit jiný text v buňce html tabulky (která v příkladu není zobrazena) v případě pokud v druhý mysql tabulce je stejný záznam jako v druhý mysql tabulce
|
||
Ovladač Profil * |
#4 · Zasláno: 20. 5. 2007, 23:38:05
vlastně to je vytáhnutí jednoho záznamu z jedný tabulky...a druhý dotaz který dá do pole řádek z duhý tabulky a ověřit jestli ten jeden záznam není roven některým záznamům v druhý tabulce
|
||
MzM Profil |
#5 · Zasláno: 21. 5. 2007, 09:12:17
YoSarin asi spíš myslel popsat problém slovy. Něco jako. "Mám tabulku autorů a textů a chci vypsat autora a seznam článků" než "mám dvě tabulky a chci vypsat záznam z tab jedna a tam kde údaje z tab1 souhlasí s údajem z tab2 tak vypsat seznam z tab2".
Ono je to v podstatě totéž, ale lidi spíš pochopí tu první větu a lépe pak poradí. Druhá věta je pro stroje. Chápu, že lidi se takto moc vyjadřovat neumí, ale trénujte to. Obvykle, pokud správně stvoříte takovýto dotaz, tak už sami vidíte řešení. Nějaké kusy kódu toho většinou moc neřeši. Lidi to akorát zaměstná myšlenkama, jak to sakra autor myslel... Kór, když ty kódy neřeší problém. |
||
Ovladač Profil * |
#6 · Zasláno: 21. 5. 2007, 10:51:25
MzM
dobře, lidi jsou hrozný, ale vraťme se k problému |
||
Ovladač Profil * |
#7 · Zasláno: 21. 5. 2007, 10:59:26
prvním sql dotazem udělám z jednoho řádku v tabulce pole, pak pomocí while vypisuju jinou tabulku...a já chci aby jeden záznam v řádku, který byl vypsán pomocí while byl zkontrolován polem, pokud bude roven vypsat něco jinýho, pokud nebude tak něco druhýho
je to lepší? |
||
Mastodont Profil |
#8 · Zasláno: 21. 5. 2007, 11:14:07
No, YoSarin se ti pokouší naznačit, že by možná stačil jeden dotaz, který by vybral data z obou tabulek, takže bys nemusel nic porovnávat. A proto chce vědět konkrétně, o jaká data jde.
Co píšeš, je nám furt houby platný. Napiš něco jako "potřebuji projít všechny zákazníky a faktury a kontrolovat, jestli pro zákazníka byla vydána faktura" ... |
||
Ovladač Profil * |
#9 · Zasláno: 21. 5. 2007, 13:04:26
Mastodont
jenže jedním dotazem to nejde |
||
Ovladač Profil * |
#10 · Zasláno: 21. 5. 2007, 13:06:27
Mastodont
potřebju porovnat text z jedný tabulky z tabulkou v druhý...pomohlo ne? protože to jsou zbytečný informace |
||
MzM Profil |
#11 · Zasláno: 21. 5. 2007, 13:12:33 · Upravil/a: MzM
Ovladač, taky spoustu věcí neumím a vím, že to někdy může vypadat, že jsem úplný blbec, že se ptám na věci, které všichni ostatní znají a považují to za samozřejmost. Ale není to tak.
Pořád píšeš technický problém popsaný z hlediska tabulek. Zkus popsat problém z hlediska člověka... Přesto že moc netuším, co potřebuejš, zkusím dát příklad (nebo několik): tab1 bude mít id_autor a jmeno tab2 fk_id_autor, dilo select t1.autor, t2.dilo from tab1 t1 join tab2 t2 on t1.id_autor = t2.fk_id_autor order by autor, dilo vypíše autory seřazené abecedně s jejich díly vrámci autora seřazené abecedně. př.2 tab1 zkr, popis ( 'M', 'muz' 'Z', 'zena' null, 'nezadano' ) tab2 jmeno, prijmeni, pohlavi aby to nebylo stejné: select jmeno, prijmeni, case when pohlavi = 'M' or pohlavi = 'Z' then (select popis from tab1 where zkr = pohlavi) else 'nezadano' end as pohl from tab2 konkrétní dotaz by se asi dal napsat i na tvůj problém, pokud ho osvětlíš tak, aby to pochopil i ten kdo to nedělal a nezná pozadí celéh problému. ...furt si ještě myslím, že to jedním dotazem jde. |
||
Mastodont Profil |
#12 · Zasláno: 21. 5. 2007, 13:16:13
jenže jedním dotazem to nejde
A to víš nebo to jen neumíš? |
||
Ovladač Profil * |
#13 · Zasláno: 21. 5. 2007, 13:21:56
Mastodont
100% vím |
||
MzM Profil |
#14 · Zasláno: 21. 5. 2007, 13:24:19
...ještě pořád si myslím, že to jedním dotazem jde.....
|
||
Mastodont Profil |
#15 · Zasláno: 21. 5. 2007, 13:28:22
Já si to taky myslím., něco jako "select neco from tabulka1 where sloupec = any (select distinct sloupec2 from tabulka 2)" ...
|
||
Ovladač Profil * |
#16 · Zasláno: 21. 5. 2007, 13:40:03
Mastodont
dejme tomu že by to takhle šlo, to ale vypíše v případě že sloupec1 == soupec2 a vypíše to while...jenže já chci aby při nerovnosti se mi vypsalo něco jinýho |
||
Mastodont Profil |
#17 · Zasláno: 21. 5. 2007, 13:45:48 · Upravil/a: Mastodont
No tak si výsledek toho dotazu hodíš do pole a pak budeš kontrolovat
if (in_array($hodnota, $pole) {echo 'ano'; } else { echo 'ne'; } ? |
||
MzM Profil |
#18 · Zasláno: 21. 5. 2007, 14:22:04
SQL umí konstrukci case viz příklad výš. Tam si můžeš vypsat, co chceš. Zkus se trochu snažit a přemýšlet, ne jenom říkat, že to nejde.
|
||
Ovladač Profil * |
#19 · Zasláno: 21. 5. 2007, 16:45:40
snažil jsem se to vyjádřit co nejlépe co umím a není to tak že když hned něco nevím tak utíkám na forum, pár hodin jsem se tím trápil sám, děkuju, vyřešeno
|
||
MzM Profil |
#20 · Zasláno: 23. 5. 2007, 14:23:51
Ovladač, ale jo, já jenom pomalu chápu a jsem z toho nervózní... :-)
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0