ugrás a tartalomhoz

Szövegösszefűzés SQL lekérdezésben

monghuz · 2005. Júl. 25. (H), 23.07
Hali!

A problémám a következő: van egy adatbázisom amelyben a köv. formában tárolom az adatokat =>
datum | kategoria | helyezes | nev | pontszam
(ez egy kapcsoló táblának csak a kis része)

Az adatokat egy adott dátumra kell visszakeresnem, majd kiiratnom, kategóriánként külön táblázatba ilyen formában

táblázat címe: kategória
helyezes | nevek | pontszam

ugyan az adatbázisban egy rekord egy nev, de kiirasnal az azonos kategóriaban es eredmennyel szereplőket ugyan abba a cellában kell felsorolnom (min: 2, max 16 nev)...

Addig már eljutottam hogy egy sima sql lekérdezéssel megfelelő sorrendbe rakva az adatokat kiiratom viszont a nevek egy cellába rakásával kicsit megtorpantam...
nincs sql-ben valami összefűző parancs szöveg tipusú mezőkhöz??

remélem aránylag érthető a probléma, ha mégsem akkor írjatok.. ja és előre is köszi a helpet...

bye Tomi
 
1

CONCAT()

Török Gábor · 2005. Júl. 27. (Sze), 13.46
A sztandard SQL ha jól tudom a || operátort ajánlja szövegösszefűzéshez, de MySQL alatt csak a CONCAT() működik.
2

a probléma másik fele..

monghuz · 2005. Júl. 28. (Cs), 17.55
Köszi erre közben magam is rátaláltam, de a másik dologgal még mindig nem vergődtem zöldágra...

ugyebár sql lekérdezés után valami ilyesmit kapok vissza:
(eredmeny_id | kategoria_id | helyezes | nevek | pontszam) =>
  1. 1   5  1   Kis Pista    8  
  2. 2   5  1   Nagy Enikő   8  
  3. 3   5  1   Gipsz Jakab  8  
  4. 4   5  2   Kis..        7  
  5. 5   5  2   Kis...       7  
  6. 6   5  3   Kis Budöske  6  
  7. .....  
És amit nekem ki kéne írnom egy táblázatba :
  1. +----------------------------------------+  
  2. |             kategoria_id               |  
  3. +----------------------------------------+  
  4. | hely. | nev                     | pont |  
  5. +----------------------------------------+  
  6. |  1    | K.Pista,N.Enikö,G.Jakab |   8  |  
  7. +----------------------------------------+  
  8. |  2    | kis.......              |   7  |  
  9. +----------------------------------------+  
  10. .....  
Lévén hogy egy ilyen rendezvényen van jópár kategória és egy kétszáz induló nem szeretném soronként sql-el kikérdezni a dolgokat... ha valakinek van valami ötlete akkor szivessen fogadnám.. elöre is köszi...

bye Tomi
3

Tömb megfelelő rendezése

Anonymous · 2005. Júl. 28. (Cs), 23.05
Valami hasonlót csinálhatsz:
  1. <?php  
  2. // az adatbázisból kijövő adatok:  
  3. $res=array(  
  4.     array('id'=>1,'helyezes'=>1,'nev'=>'Kis Pista','pontszam'=>8),  
  5.     array('id'=>2,'helyezes'=>1,'nev'=>'Nagy Eniko','pontszam'=>8),  
  6.     array('id'=>3,'helyezes'=>1,'nev'=>'Gipsz Jakab','pontszam'=>8),  
  7.     array('id'=>4,'helyezes'=>2,'nev'=>'Kis...','pontszam'=>7),  
  8.     array('id'=>5,'helyezes'=>2,'nev'=>'Kis...','pontszam'=>7),  
  9.     array('id'=>6,'helyezes'=>3,'nev'=>'Kis Budoske','pontszam'=>6)  
  10. );  
  11.   
  12. for($i=0,$_size=sizeof($res);$i<$_size;$i++)  
  13. {  
  14.     // ez a kulcsa az egésznek:  
  15.     $new[$res[$i]['helyezes']][]=$res[$i];  
  16. }  
  17.   
  18. $out='<table border="1">  
  19. <tr>  
  20. <td>Helyezés</td>  
  21. <td>Név</td>  
  22. <td>Pont</td>  
  23. </tr>';  
  24. foreach($new as $helyezes => $faszi)  
  25. {  
  26.     $faszik=array();  
  27.     for($i=0,$_size=sizeof($faszi);$i<$_size;$i++)  
  28.     {  
  29.         $faszik[]=$faszi[$i]['nev'];  
  30.         $pont=$faszi[$i]['pontszam'];  
  31.     }  
  32.     $out.='<tr>  
  33.     <td>'.$helyezes.'</td>  
  34.     <td>'.join('',$faszik).'</td>  
  35.     <td>'.$pont.'</td>  
  36.     </tr>';  
  37. }  
  38. $out.='</table>';  
  39. echo $out;  
  40. ?>  
Gyulus
4

jónak tünik

monghuz · 2005. Júl. 29. (P), 12.02
Köszi az ötletet, a napokban kipróbálom a dolgot...

bye Tomi
5

felkötöm magam

monghuz · 2005. Júl. 30. (Szo), 11.23
Nos ugyan az a probléma ált elő mint amivel pár hónapja szívtam...
ugyebár feltöltöm a "res" tömböt..
  1. <?  
  2. $res=array();  
  3.     while ($adat2 = mysql_fetch_array($lekerd4)) {  
  4.     $res[]= array('id'=>$adat2['id'],'helyezes'=>$adat2['helyezes'],'nev'=>$adat2['nev'],'edzo' =>$adat2['edzo'],'pontszam'=>$adat2['pontszam']);  
  5.     }  
  6. ?>  
a két dimenziós tömb faszán elkészül, csakhogy az adatok nem mentődnek el benne, mivel az első dim. nem szöveges
http://weblabor.hu/forumok/temak/7131#comment-11358

viszont azt nem értem, hogy a példában amit leírtál, elvileg ott is int-ként van indexelve a tömb első dimenziója és abban mükszik...
valami ötlet?

bye Tomi
6

ilyen nincs

Hojtsy Gábor · 2005. Aug. 1. (H), 11.03
Ilyen szarvashiba nincs a PHP-ben. Először is ugyanez a kód jóval egyszerűbb, ha:
  1. <?php  
  2. // $result = mysql_query("SELECT ...");  
  3. $table = array();  
  4. while ($row = mysql_fetch_assoc($result)) {  
  5.   $table[] = $row;   
  6. }  
  7. // var_dump($table);  
  8. ?>  
Abba bekerül úgy, ahogy te fent csináltad. Ha szerinted nem jó a szerkezete, akkor a var_dump() kód elől vedd ki a kommentet, és nézd meg. Nyilván egy számindexe lesz a sorok miatt, és minden eleme egy asszociatív tömb lesz a mysql_fetch_assoc() miatt (ami takarákosabb, mint a mysql_fetch_array(), mert nem teszi bele kétféle index szerint is az adatokat a tömbbe).
7

köszi

monghuz · 2005. Aug. 1. (H), 13.00
Köszi a tanácsot, igy tényleg egy cseppet egyszerübb.
viszont a több dimenziós tömbre vonatkozó dolog, nálam akkor oldódott meg mikor az első dim.-et string ként neveztem el, pedig más nem változtattam rajta.

No mindegy most még megküzdök a kategóriák szétdarabolásával és kész is vagyok..
köszönöm szépen mindenkinek a segítségét..

bye Tomi