LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Diskuze: Poradna PHP -> dotaz SQL

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 21:43
Petr Zajíc
Věk: ( ~51 let)
Ujišťuju, že půjde i ten první dotaz, zkoušel jsem ho. Minimálně na verzi 5 MySQL. O spojování tabulky se sebou sama píšeme třeba tady: http://www.linuxsoft.cz/article.php?id_article=906
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.

DISKUZE

PHP -&gt; dotaz SQL 18.1.2007 22:13 Silvestr Hašek
  |- Re: PHP -&gt; dotaz SQL 19.1.2007 04:59 Hugo
  | L Re: PHP -&gt; dotaz SQL 19.1.2007 06:31 J.Černý
  |- Re: PHP -&gt; dotaz SQL 19.1.2007 08:37 Petr Zajíc
  L Re: PHP -&gt; dotaz SQL 20.1.2007 05:25 dawe
    L Re: PHP -&gt; dotaz SQL 20.1.2007 10:31 Silvestr Hašek
      |- Re: PHP -&gt; dotaz SQL 20.1.2007 11:44 Petr Zajíc
      | L Re: PHP -&gt; dotaz SQL 20.1.2007 13:15 Silvestr Hašek
      |   L Re: PHP -&gt; dotaz SQL 21.1.2007 14:18 Petr Zajíc
      |     L Re: PHP -&gt; dotaz SQL 21.1.2007 17:32 Silvestr Hašek
      |       L Re: PHP -&gt; dotaz SQL 21.1.2007 21:43 Petr Zajíc
      L Re: PHP -&gt; dotaz SQL 21.1.2007 10:01 P.B.
        L Re: PHP -&gt; dotaz SQL 21.1.2007 14:20 Petr Zajíc




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 ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze