PHP -> dotaz SQL (link) |
18.1.2007 22:13
Silvestr Hašek
|
Věk: ( ~36 let) |
Dobrý den,
považuji se za celkem zkušeného programátora (PHP) amatéra a při programování jsem narazil na problém:
Mám nadefinovanou tabulku v databazi MySQL (MySQL 4.1.9) kde mam seznam registrovanych uzivatelu prirozene kazdy ma sve jedinecne identifikacni cislo (ID). V prubehu skriptu jsem si zjistil nekolik ID v presnem poradi napriklad 25;4;15;2;37. Potreboval bych vytvori SQL dotaz pro databazi který by mi vrátil radky přesne v danem poradi.
Jiste nyni to resim tak ze mam 5 nezavyslich dotazu, ale v prubehu casu s rostoucim poctem uzivatelu budu potrebovat aby se pocet zvysil. Nekolik desitek dotazu by podle me byl velky narok na server (chci ho co nejmene zatezovat) |
|
|
Re: PHP -> dotaz SQL (link) |
19.1.2007 04:59
Hugo
|
Věk: ( ~43 let) |
select ... where `ID` IN (25, 4, 15, 2, 37) |
|
|
Re: PHP -> dotaz SQL (link) |
19.1.2007 06:31
J.Černý
|
Věk: ( ~69 let) |
To nefunguje, určitě se na to nedá spolehnout (vyzkoušeno). Já to řeším přidáním sloupce, ve kterém si vedu požadované pořadí a výstup podle něj třídím. |
|
|
Re: PHP -> dotaz SQL (link) |
19.1.2007 08:37
Petr Zajíc
|
Věk: ( ~51 let) |
Totiž ... mám pocit, že stejně existuje klíč, podle kterého to řadíte, takže nestačilo by něco jako
select ... from ... where id in (1,10,25,45) order by prijmeni, jmeno? |
|
|
Re: PHP -> dotaz SQL (link) |
20.1.2007 05:25
dawe
|
V jakém kontextu v behu skriptu pozbíráte dané ID uzivatelu, jakoze jestli je doopravdy potreba je radit v tomhle poradi, popripade to zajistit nejak jinak, ale je potreba vedet neco okolo. |
|
|
Re: PHP -> dotaz SQL (link) |
20.1.2007 10:31
Silvestr Hašek
|
Věk: ( ~36 let) |
Jde o system hlasovani kdy kazdy uzivatel ma v tabulce bunku pro zapis koho voli. Timto dotazem si zjistim ID volenych uzivatelu a kolik maji hlasu (nazvy trosicku prepisi protoze muj spolecnik nechce aby se nejake inforamace dostaly ven):
SELECT Count(u.volim) AS hlasu, u.volim FROM uzivatele u WHERE u.ID_fora = $fora GROUP BY u.volim ORDER BY hlasu DESC
ID_fora a $fora je urceni v ktere casti webu je uzivatel registrovan. Tato informace je ulozena v SESIONS od prihlaseni.
Timto dotazem dostanu tabulku asi takhle kde hlasu je soucet hlasu ktere voleny uzivatel ma a volim je jeho ID:
hlasu volim / $no
2 23 / 1
1 9 / 2
(podsad to jde :))) Nyni si ulozim informace do pole $vyherce[$no] kde $no je cislo poradi a ted prichazi kamen urazu potrebuji zjistit prezdivku(nick) pod kterou je uzivatel registrovan opet ve stejne tabulce.
Takze ted doufam ze to pochopite a poradite nejake jednoduche reseni myslim ze nejelegantnejsi by byl jeden dotaz
SELECT nick FROM uzivatele WHERE ID IN (23,9) ORDER BY ......, nebo neco podobneho, ale jak koukam tak to asi nepujde :D |
|
|
Re: PHP -> dotaz SQL (link) |
20.1.2007 11:44
Petr Zajíc
|
Věk: ( ~51 let) |
Snažím se to pochopit, ale moc mi to nejde. Ideální by bylo někde vystavit strukturu databáze a (třeba fiktivní) data a já bych Vám s tím pomohl. Zcela určitě lze řadit spojení více tabulek podle sloupce jedné z nich, takže problém bych v tom neviděl. |
|
|
Re: PHP -> dotaz SQL (link) |
20.1.2007 13:15
Silvestr Hašek
|
Věk: ( ~36 let) |
Hmm zkusim to znova trosku jinak s tou db myslim ze to neni poreba protoze tam je sposta veci co s timto nesouvisi. Pro funkci toho skriptu je mozne pouzit 5 sloupcu ze soucasne db a to:
ID (jedinecne identifikaci cislo uzivatele)
nick (prezdivka pod kterou uzivatel vystupuje na webu)
ID_fora (rozdeluje web na casti do kterych se uzivatele registruji)
volim (uzivatel voli moderatora fora uklada se ID)
post (je-li uzivatel moderatorem, redaktorem, administratorem,...)
Přiklad tabulky:
ID / nick / ID_fora / volim
1 / adam / 1 / 1
2 / eva / 1 / 5
3 / jakub / 1 / 2
4 / jan / 1 / 2
5 / herry / 1 / 2
Toerie (podle me):
Jednoduchym formularem muze kazdy uzivatel do bunky "volim" ulozit uzivatele ktereho si preje mit jako moderatora. Ja potrebuji udelat vypis z toho hlasovani kde vysledkem bude serazeni lidi podle poctu hlasu tzn ze by tabulka vypadala asi takto:
Uzivatel / hlasu
eva / 3
adam / 1
herry / 1
Vzdy kdyz nekdo spusti skript zajistujici zmenu bunky volim tedy vlastni hlasovani tak se prepocitaji hlasy a upravi se bunka post u jednotlivich uzivatelu.
Realita:
Vsechno mi funguje tak jak ma ale mam problem s vypsanim tabulky ukazujici prubeh hlasovani. Potrebuji ji seradit podle hlasu od nejvyssiho po nejnissi.
Skript obsluhujici vypisovani tabulky (chybny):
$no = 1;
$sql_hlasovani = mysql_query("SELECT Count(u.volim) AS hlasu, u.volim FROM uzivatele u WHERE u.ID_fora = $fora GROUP BY u.volim ORDER BY hlasu DESC");
while($zaz_hlasovani = mysql_fetch_array($sql_hlasovani)){
if($zaz_hlasovani["volim"] != 0){
$id_uziv = $zaz_uziv["volim"];
$ar_hlasu[$no] = $zaz_hlasovani["hlasu"];
$ar_ID[$no] = $zaz_hlasovani["volim"];
$no++;
}
} // pocita hlasy a urcuje id k hlasum + zapis do poli
// odtud to nejde tak jak ma :)
////////////// KOTVA 1 /////////////////
$sql_najdi = "SELECT nick, ID FROM uzivatele WHERE ";
for($i = 1; $i<= 5; $i++){
if($i != 1 AND $ar_ID[$i] != ""){
$sql_najdi .= " OR ";
}
if($ar_ID[$i] != ""){
$sql_najdi .= "ID = ".$ar_ID[$i];
}
} // sql dotaz zjistujici nick uzivatele
//////////////// KOTVA 2 ///////////////////////
if($ar_nick[1] != ""){
echo "<table border='1'>";
echo "<tr>";
echo "<td>Uživatel:</td>";
echo "<td>Počet hlasů</td>";
echo "</tr>";
$i = 1;
$sql_najdi = mysql_query($sql_najdi);
while($zaz_najdi = mysql_fetch_array($sql_najdi)){
if($zaz_najdi["ID"] == $ar_ID[$i]){
echo "<tr>";
echo "<td>".$zaz_najdi["nick"]."</td>";
echo "<td>".$ar_hlasu[$i]."</td>";
echo "</tr>";
}
$i++;
}
echo "</table>";
} else {
echo "Toto forum nema vedeni<br />";
}
KOTVA 1 - dotaz $sql_najdi je spatne sestaven porteboval bych presne razeni podle ID v nasem modelovem pripade tedy 5;1;2
KOTVA 2 - moje tapani ve tme je tam podminka kterou, ani sam nevim co jsem chtel dokazat :D Jinak by to melo byt vypsani tizene tabulky :)
Jeste mam jednu otazecku jak muzu pouzit ty "Omezene HTML" znaky ve forech? Neco jsem zkousel ale nevidel jsem tozeny efekt: |
|
|
Re: PHP -> dotaz SQL (link) |
21.1.2007 14:18
Petr Zajíc
|
Věk: ( ~51 let) |
create table user (id int, nick varchar(20),id_fora int, volim int); insert into user (id, nick, id_fora, volim) values (1,'adam',1,1);
insert into user (id, nick, id_fora, volim) values (2,'eva',1,5);
insert into user (id, nick, id_fora, volim) values (3,'jakub',1,2);
insert into user (id, nick, id_fora, volim) values (4,'jan',1,2);
insert into user (id, nick, id_fora, volim) values (5,'herry',1,2);
a tabulku získáte pomocí
select volim, count(*) from user group by volim order by count(*) desc;
případě s příjmením namísto id pak třeba pomocí
select voleny.nick, count(*)
from user join user voleny on user.volim = voleny.id
group by user.volim order by count(*) desc
Jedná se skutečně o situaci, kdy můžete tabulku spojit samu se sebou a nechat všechnu špinavou práci oddřít databázi; a v PHP pak už to můžete pouze jen vypsat. Pomohlo to? |
|
|
Re: PHP -> dotaz SQL (link) |
21.1.2007 17:32
Silvestr Hašek
|
Věk: ( ~36 let) |
Dekuji moc uz to chapu uz mi to jde. Jen jsem musel ptrosicku poupravit vas dotaz na(hazelo to nejakou chybku :))) :
SELECT COUNT(user.volim) AS hlasu, voleny.nick
FROM user join user voleny on user.volim = voleny.id GROUP BY user.volim ORDER BY hlasu DESC
Nejak me nenapadlo ze by sla spojovat ta sama tabulka :D
Jeste jednou dekuji
|
|
|
|
Re: PHP -> dotaz SQL (link) |
21.1.2007 10:01
P.B.
|
Věk: ( ~46 let) |
rika vam neco JOIN a spojovani tabulek ? |
|
|
Re: PHP -> dotaz SQL (link) |
21.1.2007 14:20
Petr Zajíc
|
Věk: ( ~51 let) |
Případně poddotazy ;-) Vyřešil jsem to, viu výše. Snad mu příklad pomůže. |
|
|
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|