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   5  1   Kis Pista    8
2   5  1   Nagy Enikő   8
3   5  1   Gipsz Jakab  8
4   5  2   Kis..        7
5   5  2   Kis...       7
6   5  3   Kis Budöske  6
.....
És amit nekem ki kéne írnom egy táblázatba :

+----------------------------------------+
|             kategoria_id               |
+----------------------------------------+
| hely. | nev                     | pont |
+----------------------------------------+
|  1    | K.Pista,N.Enikö,G.Jakab |   8  |
+----------------------------------------+
|  2    | kis.......              |   7  |
+----------------------------------------+
.....
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:
<?php
// az adatbázisból kijövő adatok:
$res=array(
	array('id'=>1,'helyezes'=>1,'nev'=>'Kis Pista','pontszam'=>8),
	array('id'=>2,'helyezes'=>1,'nev'=>'Nagy Eniko','pontszam'=>8),
	array('id'=>3,'helyezes'=>1,'nev'=>'Gipsz Jakab','pontszam'=>8),
	array('id'=>4,'helyezes'=>2,'nev'=>'Kis...','pontszam'=>7),
	array('id'=>5,'helyezes'=>2,'nev'=>'Kis...','pontszam'=>7),
	array('id'=>6,'helyezes'=>3,'nev'=>'Kis Budoske','pontszam'=>6)
);

for($i=0,$_size=sizeof($res);$i<$_size;$i++)
{
	// ez a kulcsa az egésznek:
	$new[$res[$i]['helyezes']][]=$res[$i];
}

$out='<table border="1">
<tr>
<td>Helyezés</td>
<td>Név</td>
<td>Pont</td>
</tr>';
foreach($new as $helyezes => $faszi)
{
	$faszik=array();
	for($i=0,$_size=sizeof($faszi);$i<$_size;$i++)
	{
		$faszik[]=$faszi[$i]['nev'];
		$pont=$faszi[$i]['pontszam'];
	}
	$out.='<tr>
	<td>'.$helyezes.'</td>
	<td>'.join(', ',$faszik).'</td>
	<td>'.$pont.'</td>
	</tr>';
}
$out.='</table>';
echo $out;
?>
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..

<?
$res=array();
	while ($adat2 = mysql_fetch_array($lekerd4)) {
	$res[]= array('id'=>$adat2['id'],'helyezes'=>$adat2['helyezes'],'nev'=>$adat2['nev'],'edzo' =>$adat2['edzo'],'pontszam'=>$adat2['pontszam']);
	}
?>
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:

<?php
// $result = mysql_query("SELECT ...");
$table = array();
while ($row = mysql_fetch_assoc($result)) {
  $table[] = $row; 
}
// var_dump($table);
?>
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