Autor | Zpráva | ||
---|---|---|---|
Ježišek Profil * |
Ahoj,
mám v databázi několikrát obsažený jeden řetězec, někdy číslo, potřebuji, aby se mi vypsalo, kolikrát v databázi je použito číslo 10 a kolikrát 15 a kolikrát 20... Tudiž... mam v databazi například 150 různých čísel a potřebuji vědět, kolikrát je které zastoupené. Lze to napsat tak, že těch 150 dáte do jedné proměnné :-) $nejake_cislo Děkuji :-) |
||
Akacko Profil |
#2 · Zasláno: 28. 11. 2009, 20:56:43
Ježišek:
Lepší je to dělat pomocí SQL Např. v MySQL takto: $nejake_cislo = mysql_result(mysql_query('SELECT COUNT(*) FROM tabulka WHERE sloupec_s_cislem=10'),0); |
||
Ježišek Profil * |
#3 · Zasláno: 28. 11. 2009, 21:04:40
Budu konkrétní
Vypisuji 150 IP adres... které jsou v tabulce vstupy_testovani pod názvem ip_adresa ted potřebuji, aby se mi vypsali všechny adresy a kolikrát sou v db... //berme v potaz, že všechny IP adresy jsou ve stejné tabulce a sloupku :-) |
||
Ježišek Profil * |
#4 · Zasláno: 28. 11. 2009, 21:06:36
Nebo ještě jinak... vypsat jen tu adresu podle SQL
where id=' . (int) $_GET['id'] Takže, teď mam adresu a potřebuji, aby se mi vypsal její počet obsažení v db |
||
Alphard Profil |
#5 · Zasláno: 28. 11. 2009, 21:12:11
Ježišek:
Viz [#2] funkce count() vám spočítá řádky. select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa order by pocet desc a když budete chtít počet konkrétní IP, tak select count(ip_adresa) from vstupy_testovani where id = 123 |
||
Ježišek Profil * |
#6 · Zasláno: 28. 11. 2009, 21:23:50
zde je aktuální kód:
<? $pocet_ip = mysql_query('select count(ip_adresa) from vstupy_testovani WHERE id= $row[ID] '); $result = mysql_query('SELECT ID,ip_adresa,cas_zaznamenani,http_agent,pc_hostname FROM vstupy_testovani ORDER by ID desc LIMIT 200'); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo " <tr> <td><img src='img/login-icon.gif' width='16' height='16'/> #$row[ID] <br> Tato ip je evidována již $pocet_ip x</td> <td class='first style1'><font color='#00000'>$row[ip_adresa]</font><br> - $row[cas_zaznamenani]</td> <td>$row[pc_hostname]</td> <td><a href='vstup.php?id=$row[ID]'><img src='img/edit-icon.gif' width='16' height='16'/></a></td> <td><a href='smaz.php?id=$row[ID]'><img src='img/hr.gif' width='16' height='16' /></a></td> </tr> "; } ?> |
||
Ježišek Profil * |
#7 · Zasláno: 28. 11. 2009, 22:19:45
ale mmnt ! pocet neni registrovat v databazi...
pocet se musi vytvořit, tudiž se musí nastavit to, aby pocet_ip = poctu ip adresy v podmince $row[ID] doufám,že víš jak to myslím... ten počet není nikde definovan, ten se musí vypočítat |
||
Ježišek Profil * |
|||
Alphard Profil |
#9 · Zasláno: 28. 11. 2009, 22:29:00
A teď ten dotaz takhle:
$result = mysql_query('SELECT t.ID, t.ip_adresa, t.cas_zaznamenani, t.http_agent, t.pc_hostname, m.pocet FROM vstupy_testovani t left join (select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa) m on t.ip_adresa = m.id_adresa ORDER by t.ID desc LIMIT 200'); |
||
Ježišek Profil * |
#10 · Zasláno: 28. 11. 2009, 22:30:41
a nic....
|
||
Alphard Profil |
#11 · Zasláno: 28. 11. 2009, 22:44:09 · Upravil/a: Alphard
Ježišek:
„a nic....“ Taky mě to přestává bavit, vytvořil jsem si testovací tabulku, abych zjistil, že jsem jen přepsal ip_adresa na id_adresa. Povede tohle konečně k cíli? $result = mysql_query('SELECT t.ID, t.ip_adresa, t.cas_zaznamenani, t.http_agent, t.pc_hostname, m.pocet FROM vstupy_testovani t left join (select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa) m on t.ip_adresa = m.ip_adresa ORDER by t.ID desc LIMIT 200'); A rovnou zopakuji svou dřívější otázku, ať z toho neděláme chat: Tohle teda počítá všechny IP v tabulce, nejen z posledních 200 záznamů, chcete to omezit, nebo ne? PS: Začínám se v tom tady ztrácet, smažu několik předchozích příspěvků, které stejně nikomu nepomůžou. |
||
Ježišek Profil * |
#12 · Zasláno: 28. 11. 2009, 22:50:10
<? $result = mysql_query('SELECT t.ID, t.ip_adresa, t.cas_zaznamenani, t.http_agent, t.pc_hostname, m.pocet FROM vstupy_testovani t left join (select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa) m on t.ip_adresa = m.ip_adresa ORDER by t.ID desc LIMIT 200'); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo " <tr> <td><img src='img/login-icon.gif' width='16' height='16'/> #$row[ID] <br> <font color='red'><b>Upozornění</b></font> $row[pocet] x</td> <td class='first style1'><font color='#00000'>$row[ip_adresa]</font><br> - $row[cas_zaznamenani]</td> <td>$row[pc_hostname]</td> <td><a href='vstup.php?id=$row[ID]'><img src='img/edit-icon.gif' width='16' height='16'/></a></td> <td><a href='smaz.php?id=$row[ID]'><img src='img/hr.gif' width='16' height='16' /></a></td> </tr> "; } ?> Funguje, díky :-) |
||
Ježišek Profil * |
#13 · Zasláno: 28. 11. 2009, 22:53:21
Ještě jsem se chtěl zeptat, vím, že už asi mě pošleš někam, ale ->
ukládám aktuální čas a čas zaznamenání ... pod $cas1 = aktuální čas ve výpisu Date $cas2 = $row[cas_zaznamenani] tudiž, když bych chtěl získat čas, před jakou dobou tento login proběhl odečtu čas 1 od času 2 ... a mam vysledek, ale nefunguje mi to. |
||
Alphard Profil |
#14 · Zasláno: 28. 11. 2009, 22:58:55
Ježišek:
„odečtu čas 1 od času 2“ Máte je jako timestamp nebo jak s nimi pracujete? |
||
Ježišek Profil * |
#15 · Zasláno: 28. 11. 2009, 23:02:27
Můžeš mi tykat.
Čas zaznamenání do databáze ukládám takto $cas_zaznamenani = Date ("d.m.Y - H:i:s"); tudiž se mi vypisuje teď tvar 28.11.2009 - 22:57:20 tak jako to mam na stránkách takže jsem myslel, že logicky, když dám $cas_1 = Date ("d.m.Y - H:i:s"); $cas_2 = $row[cas_zaznamenani]; $vysledek = $cas1 - $cas2 ale tudy cesta nevede... |
||
Alphard Profil |
#16 · Zasláno: 28. 11. 2009, 23:14:46
function timeAgoInWords($time) { $time = strtotime($time); $delta = time() - $time; $delta = round($delta / 60); if ($delta == 0) return 'před okamžikem'; if ($delta == 1) return 'před minutou'; if ($delta < 45) return "před $delta minutami"; if ($delta < 90) return 'před hodinou'; if ($delta < 1440) return 'před ' . round($delta / 60) . ' hodinami'; if ($delta < 2880) return 'včera'; if ($delta < 43200) return 'před ' . round($delta / 1440) . ' dny'; if ($delta < 86400) return 'před měsícem'; if ($delta < 525960) return 'před ' . round($delta / 43200) . ' měsíci'; if ($delta < 1051920) return 'před rokem'; return 'před ' . round($delta / 525960) . ' lety'; } Je to upravené z helperu pro Nette od Grudla, původní verzi teď nemohu najít. $vysledek = timeAgoInWords($row['cas_zaznamenani']); |
||
Ježíšek Profil * |
#17 · Zasláno: 28. 11. 2009, 23:19:55
<? function timeAgoInWords($time) { $time = strtotime($time); $delta = time() - $time; $delta = round($delta / 60); if ($delta == 0) return 'před okamžikem'; if ($delta == 1) return 'před minutou'; if ($delta < 45) return "před $delta minutami"; if ($delta < 90) return 'před hodinou'; if ($delta < 1440) return 'před ' . round($delta / 60) . ' hodinami'; if ($delta < 2880) return 'včera'; if ($delta < 43200) return 'před ' . round($delta / 1440) . ' dny'; if ($delta < 86400) return 'před měsícem'; if ($delta < 525960) return 'před ' . round($delta / 43200) . ' měsíci'; if ($delta < 1051920) return 'před rokem'; return 'před ' . round($delta / 525960) . ' lety'; } $vysledek = timeAgoInWords($row['cas_zaznamenani']); $result = mysql_query('SELECT t.ID, t.ip_adresa, t.cas_zaznamenani, t.http_agent, t.pc_hostname, m.pocet FROM vstupy_testovani t left join (select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa) m on t.ip_adresa = m.ip_adresa ORDER by t.ID desc LIMIT 200'); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo " <tr> <td><img src='img/login-icon.gif' width='16' height='16'/> #$row[ID] <br> <font color='red'><b>Upozornění</b></font> tato IP<br> je zde už <b>$row[pocet]x</b> evidována!</td> <td class='first style1'><font color='#00000'>$row[ip_adresa]</font><br> - $row[cas_zaznamenani] $vysledek</td> <td>$row[pc_hostname]</td> <td><a href='vstup.php?id=$row[ID]'><img src='img/edit-icon.gif' width='16' height='16'/></a></td> <td><a href='smaz.php?id=$row[ID]'><img src='img/hr.gif' width='16' height='16' /></a></td> </tr> "; } ?> vypisuje mi to Před 40 lety což je blbost... není to tím, že TIME se počíta od roku X a já to vypisuji v jiném formátu? |
||
Alphard Profil |
#18 · Zasláno: 28. 11. 2009, 23:24:00
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $vysledek = timeAgoInWords($row['cas_zaznamenani']); Nemůžete s $row pracovat dříve, než se vytvoří. |
||
Ježíšek Profil * |
#19 · Zasláno: 28. 11. 2009, 23:27:51
<? function timeAgoInWords($time) { $time = strtotime($time); $delta = time() - $time; $delta = round($delta / 60); if ($delta == 0) return 'před okamžikem'; if ($delta == 1) return 'před minutou'; if ($delta < 45) return "před $delta minutami"; if ($delta < 90) return 'před hodinou'; if ($delta < 1440) return 'před ' . round($delta / 60) . ' hodinami'; if ($delta < 2880) return 'včera'; if ($delta < 43200) return 'před ' . round($delta / 1440) . ' dny'; if ($delta < 86400) return 'před měsícem'; if ($delta < 525960) return 'před ' . round($delta / 43200) . ' měsíci'; if ($delta < 1051920) return 'před rokem'; return 'před ' . round($delta / 525960) . ' lety'; } $result = mysql_query('SELECT t.ID, t.ip_adresa, t.cas_zaznamenani, t.http_agent, t.pc_hostname, m.pocet FROM vstupy_testovani t left join (select ip_adresa, count(ip_adresa) pocet from vstupy_testovani group by ip_adresa) m on t.ip_adresa = m.ip_adresa ORDER by t.ID desc LIMIT 200'); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $vysledek = timeAgoInWords($row['cas_zaznamenani']); echo " <tr> <td><img src='img/login-icon.gif' width='16' height='16'/> <b>#$row[ID]</b> <br> <font color='red'><b>Upozornění</b></font> tato IP<br> je zde už <b>$row[pocet]x</b> evidována!</td> <td><font color='#ff8c00'><b>$row[ip_adresa]</b></font><br> - $row[cas_zaznamenani] <br> Záznam přidán $vysledek</td> <td>$row[pc_hostname]</td> <td><a href='vstup.php?id=$row[ID]'><img src='img/edit-icon.gif' width='16' height='16'/></a></td> <td><a href='smaz.php?id=$row[ID]'><img src='img/hr.gif' width='16' height='16' /></a></td> </tr> "; } ?> je mi líto, i po opravě pořád píše před 40 lety... viz. -> http://milankubik.info/login/ |
||
Alphard Profil |
#20 · Zasláno: 28. 11. 2009, 23:35:33
Tak ta pomlčka je asi problém.
$vysledek = timeAgoInWords(strtr($row['cas_zaznamenani'], "-", " ")); |
||
Ježíšek Profil * |
#21 · Zasláno: 28. 11. 2009, 23:36:40
|
||
Ježíšek Profil * |
#22 · Zasláno: 28. 11. 2009, 23:38:38
hele myslíš, že by byl problém vytáhnout z hostname jenom tu adresu provozovatele?
cl084016103146.unet.cz by zůstalo jen unet.cz |
||
Alphard Profil |
#23 · Zasláno: 29. 11. 2009, 00:24:48 · Upravil/a: Alphard
Ježíšek:
Třeba vzít řetězec od předposlední tečky (explode()). Jestli to chceš podrobněji, tak si založ nové vlákno, tady je nepořádek. Už to odečítání času mělo být jinde. |
||
Časová prodleva: 15 let
|
0