Autor | Zpráva | ||
---|---|---|---|
Timo Profil * |
#1 · Zasláno: 7. 3. 2007, 02:46:16
Zdravím, mám dotaz ohledně porovnávání obsahu pole s databází:
dejme tomu, že mám nějaké pole s názvy zeleniny: $zelenina = array ("mrkev", "celer", "brambory") a v databázi mám například tabulku, kde jsou následující údaje: název ks Mrkev 10 celer 2 rajče 3 A jde mi o to, jak docílit toho, aby se to pole porovnalo se záznamem v databázi a aby se u záznamů, které budou souhlasit objevil počet kusů. U těch, které souhalsit nebudou se neobjeví nic. Tuším, že to bude nějak přes foreach, ale zkouším to už několik hodin a nic :( Poradíte? Díky |
||
Hugo Profil |
#2 · Zasláno: 7. 3. 2007, 05:45:56
Můžeš použít dotaz
select * from `zelenina` where `Nazev` IN ('Mrkev', 'Celer', 'Brambory') a potom ke každé zelenině z pole přiřadit počet kusů z db. while ($data = MySQL_Fetch_Assoc($res)) { if (In_Array($data['Nazev'], $zelenina)) { // prirazeni poctu kusu } } |
||
Timo Profil * |
#3 · Zasláno: 7. 3. 2007, 09:05:32
Hugo: díky, tak tohle mě nenapadlo, vyzkouším
|
||
Timo Profil * |
#4 · Zasláno: 7. 3. 2007, 09:14:37
no, ještě když na to koukám... Když jsem psal, že se neobjeví nic, tak jsem myslel, že se nebude vypisovat žádný záznam z databáze, ale ta zelenina bude vypsaná (například textem s jinou barvou), ale bez počtu kusů. špatně jsem se vyjádřil.
Takže pokud dám dohromady pole a tabulku, mělo by vyjít zhruba tohle: Mrkev: 10ks Celer: 2ks Brambory (ty by měly být jinou barvou). Nejsem si tedy jist, jestli je tohle řešení úplně to nejlepší.. |
||
Hugo Profil |
#5 · Zasláno: 7. 3. 2007, 10:41:26
Timo
Tak si nějak označ ty prvky pole, které byly nalezeny v db a nakonec vypiš nenalezené položky. |
||
Timo Profil * |
#6 · Zasláno: 7. 3. 2007, 11:41:53
nevím nevím... Pořád na to nemůžu přijít.
Nejde mi o zobrazení všech údajů z databáze, ale o zobrazení všech prvků z pole - u těch, které jsou v DB uloženy chci zobrazovat i ty kusy, ty, které v DB nejsou chci zobrazit jen název... Udělat to obráceně (tedy vypsat všechny názvy z DB a u těch, které jsou v poli vypsat kusy mi jde, ale to není to, co chci)... Takže nevím Začínám bát celkem zoufalý :( |
||
nightfish Profil |
#7 · Zasláno: 7. 3. 2007, 11:53:33
$zelenina = array ("mrkev", "celer", "brambory"); |
||
tiso Profil |
#8 · Zasláno: 7. 3. 2007, 11:59:35
Timo dá sa to tak že zrušíš prvok poľa pomocou unset ktorý si už vypísal z DB a na záver vypíšeš to čo zostalo z poľa cez foreach...
Prípadne si prvky z DB ulož do druhého poľa a potom pracuj z poľami... |
||
tiso Profil |
#9 · Zasláno: 7. 3. 2007, 12:01:50
nightfish - to Tvoje nefunguje tak ako chcel...
|
||
tiso Profil |
#10 · Zasláno: 7. 3. 2007, 12:05:56
nightfish - to Tvoje nefunguje tak ako chcel...
|
||
Timo Profil * |
#11 · Zasláno: 7. 3. 2007, 12:15:47
tiso: nešlo by to i s příkladem, nějak přesně nevím, jak to myslíš
|
||
tiso Profil |
#12 · Zasláno: 7. 3. 2007, 13:33:13
Timo tak ten prvý spôsob, úprava kódu od nightfish-a
|
||
Timo Profil * |
#13 · Zasláno: 7. 3. 2007, 14:47:42
tiso nechce mi to fungovat, vždy se zobrazí jen bílá stránka (ani žádná chybová hláška). Nejsem teď doma, takže nemám čas to pořádně zkontrolovat, ale snad to bude mnou :)
Jinak díky za radu |
||
nightfish Profil |
#14 · Zasláno: 7. 3. 2007, 15:35:43
tiso
pravdu máš, pochopil jsem to přesně opačně než to má být |
||
Timo Profil * |
#15 · Zasláno: 8. 3. 2007, 02:20:16
tiso tak moc děkuju, chybělo tám pár závorek, ale funguje to skvěle. Jsem zauzlován.
Teď už mě čeká poslední část téhle záludnosti: to původní pole $zelenina se nakonec musí načítat z řetězce, což znamená, že přes tohle: $zelenina =explode(", " ,$string); rozložím string na jednotlivou zeleninu do pole, které se ovšem nechová jako $zelenina = array ("mrkev", "celer", "brambory"); Takže teď je otázka, jak rozložený string přes explode() dostat do toho kódu nahoře. Pročítal jsem manuál a různě to hledal po netu, ale zatím jsem na nic nenarazil, pokud někdo ví, tak ať se prosím podělí. Díky moc všem |
||
Timo Profil * |
#16 · Zasláno: 8. 3. 2007, 02:23:11
ještě dodatek, když použiji pole vytvořené pomocí explode(), tak se mi kusy zobrazí pouze u prvního názvu, dále už se to chová, jakoby by názvy nebyly v DB nalezeny...
Snad někdo poradí |
||
krteczek Profil |
#17 · Zasláno: 8. 3. 2007, 07:01:48 · Upravil/a: krteczek
a odstranil jsi všechny prázdné znaky z řetězce? Třeba nějak takhle:
$string = strtr($string, array(" " => '', "\n" => '', "\r" => ''); PS: opraveno, ztratili se zpětná lomítka |
||
tiso Profil |
#18 · Zasláno: 8. 3. 2007, 10:10:45 · Upravil/a: tiso
Timo aha, unset() - stáva sa...
daj si vypísať ten reťazec, odriadkovanie môže byť problém, ako písal krteczek, ešte môže byť problém že tam máš viac alebo žiadnu medzeru za čiarkou, radšej by som to robil takto: $zelenina =explode(",", trim($string, " \t\n"));//trim odstrani biele znaky |
||
Timo Profil * |
#19 · Zasláno: 8. 3. 2007, 12:16:46
tiso, krteczek - díky moc, trim() jsem měl sice na tento string použitý už jinde, ale zapomněl jsem že jsem o pár řádků v kódu použil v explode jako rozdělovač <br />, což bylo jen provizorní řešení a v tom byl zakopaný pes. Když jsem <br /> nahradil \r\n, tak vše funguje tak, jak má.
Díky všem |
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0