Hirdetés

2012. május 29., kedd

Hozzászólások

(#1) kismukk


kismukk
(újonc)

Szesztek!

Adott egy adatbázis mondgyuk CD. Található benne két tábla, tegyük fel: eloado, szam.
Az eloado struktúrája: eloado_id, eloado_nev, szul_ido.
A szam struktúrája: szam_id, cim, hossz, eloado_id.

Amint látjátok az eloado_id határozza meg az előadót.

Kérdésem. Kellene nekem egy lekérdezés php nyelven, ami kiírja táblázatosan a számokat és a hozzátartozó előadókat, tehát a szam tábla eloado_id helyére az eloado tábla tartalmát.

Remélem érthető voltam.

(Nem vagyok kiványcsi semmiféle agyatlan beszólásra.)

Előre is köszi

kismukk

:))

(#2) L3zl13 válasza kismukk (#1) üzenetére


L3zl13
(PH! nagyúr)

Két lehetőség.
Egyik simán feltételezve, hogy minden előadóhoz tartozik szám és viszont.
Ekkor legegyszerűbb:
select szam_id,cim,hossz,eloado_nev,szul_ido from szam, eloado where szam.eloado_id=eloado.eloado_id order by AKÁRMI

Vagy az univerzálisabb megoldás joinnal:
select szam_id,cim,hossz,eloado_nev,szul_ido from szam full outer join eloado on szam.eloado_id=eloado.eloado_id order by AKÁRMI

full outer join = mindkét tábla minden mezeje szerepel az eredményben, akkor is, ha nincs a másik táblában hozzá tartozó érték
vagy használhatsz helyette inner join = csak azok az adatok amelyek mindkét táblában szerepelnek (mint az első verzió)
left join = bal oldali táblából minden jobb oldaliból csak azok amelyek a bal oldaliban is szerepelnek
right join = előzőnek az ellentéte

Aki hülye, haljon meg!

(#3) L3zl13 válasza L3zl13 (#2) üzenetére


L3zl13
(PH! nagyúr)

Ja ez nem PHP nyelven volt. Hanem csak sima SQL lekérdezés amit PHP-vel végre kell hajtatni. Remélem a PHP-s adatbáziskezelés alapjait tudod annyira, hogy ezt hogyan lehet lefuttatni, és az eredményt feldolgozni...

Aki hülye, haljon meg!

(#4) kismukk


kismukk
(újonc)

Köszönöm válaszod. Kipróbálom! :DD

:))

(#5) klinsi


klinsi
(újonc)

Halihó!

Adott 1 tábla: ext_file
Struktúrája: id, info_id, cim, filenev, user
Van benne pár rekord, ahol az a lényeg, hogy az info_id mezo-nek vannak adott ertekei. Pl van 3 rekord aminel az info_id='1' masik 2 rekord ahol az erteke '2'.

Adott a lekerdezes: SELECT info_id, sum(1) as darab from ext_file group by info_id;

Localhost-on a a darab mezo szepen ki is adja a varva vart 3-as eredmenyt (ugye a lekerdezes arrol szol, hogy melyik info_id-bol van a legtobb es mennyi az a legtobb).
Fent a szerverem (X3) azonban a kapott eredmeny 1.

Csinaltam azt is, hogy keszitettem 1 db php fajlt ami torli ujra letrehozza a tablat mad beleteszi a teszt rekordokat es le is kerdez utana egybol...
Localhoston kiadta a jo eredmenyt (3) a szerveren szerinte az eredmeny 1...
A szerveren 3.23.36 verzioju Mysql van...

Tud vki nekem vmi magyarazatot talalni? :F

Elore is koszi: klinsi

(#6) zrubi válasza klinsi (#5) üzenetére


zrubi
(senior tag)

Hát ennek a függvénynek a végeredménye mindíg egy: sum(1)

Szerintem neked ilyen kéne:
select info_id, count(info_id) as darab from ext_file group by info_id;

zrubi.hu

(#7) klinsi válasza zrubi (#6) üzenetére


klinsi
(újonc)

Hi!

Köszi a gyors reakciót de sajna nem jó. Amit Te mondasz attól szépen kiválogatja, hogy az info_id melyik értéke hány darab rekordban szerepel.

Nekem meg az kéne, hogy ezt sorba is tegye...
De mint mondtam (a lentebb írt SQL lekérdezés) tökéletesen jó. Localhost-on teszteltem és tök jől működik.

Csak a szerveren ugyanazt a táblát meg környezetet létrehozva nem megy... ebből következik számomra, hogy lehet vmi környezeti változás de gőzöm sincs, hogy mi :-(

Azért próbálok alakítani a Te megoldásodon is kicsit, hátha úgy jó lesz...

Klinsi

(#8) klinsi válasza zrubi (#6) üzenetére


klinsi
(újonc)

Hali!

select info_id, count(info_id) as darab from ext_file group by info_id order by darab desc limit 1;

Ez lett a megoldás :-) A Tiedből kiindulva. Thnx :-)

Klinsi

(#9) VladimirR


VladimirR
(PH! nagyúr)

na a helyzet az, hogy nem ertek sem a php-hez, sem a mysql-hez, csak van nehany progim, ami hasznalna oket
a lenyeg az, hogy van egy adatbazis, es abbol egy php lekerdezgetne, meg csinalna egy szep stat-ot
viszont valamiert nem hajlando a dologra

mit kellene megadni neki usernek, meg passnak? a phpmyadmin, tolem nem kert semmi ilesmit (user, pass), es az megis tokeletesen olvasgat az adatbazisokbol

ja es a hibauzenetek:

Warning: mysql_connect(): Access denied for user: 'mysqluser@localhost' (Using password: YES) in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 26

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 27

Warning: mysql_connect(): Access denied for user: 'mysqluser@localhost' (Using password: YES) in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 26

Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 27

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 50

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 51

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 50

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 51

Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 50

Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in d:\programs\internet\server\appserver\www\jatekok\pvpgn-stats\includes\db_handler.php on line 51

(#10) Out válasza VladimirR (#9) üzenetére


Out
(őstag)

Ha felvan telepitve a MySQL a gepedre, akkor abban megtudod nezni, hogy milyen juzer/pass kell ahhoz hogy elerd a tablazatokat...

Commodore Plus/4 --- The home computer with built-in professional software

(#11) VladimirR válasza Out (#10) üzenetére


VladimirR
(PH! nagyúr)

fent van a mysql, es van, ami hozza is fer (phpmyadmin pl jelszot sem kert, meg van egy progi, ami meg irkal is a tablakba)
btw hol tudom megnezni?

(#12) Fisha válasza VladimirR (#11) üzenetére


Fisha
(senior tag)

Nezd meg a phpmyadmin milyen passal loginol. config.inc.php-ben:

$cfg['Servers'\][$i]['auth_type'\] = 'http\'; // Authentication method (config, http or cookie based)?
$cfg['Servers'\][$i]['user'\] = 'user\'; // MySQL user
$cfg['Servers'\][$i]['password'\] = 'pass\'; // MySQL password (only needed


[Szerkesztve]
A backslasheket en tettem ele, hogy ne legyen tele smileyval.

[Szerkesztve]

(#13) Fisha válasza Fisha (#12) üzenetére


Fisha
(senior tag)

Hu mi lett ebbol :)

(#14) VladimirR válasza Fisha (#12) üzenetére


VladimirR
(PH! nagyúr)

kosz, megnezem

televagta smile-val?
megneztem :DDD ;]

[Szerkesztve]

(#15) Ghostika


Ghostika
(lelkes újonc)

Hi!
Abban kérném a segítségetek hogy éppen egy forumot probálok írni és már minden megy kivétel. hogy kéne egy számláló ami megszámolja hogy eddig hány hozzaszolás érkezett ehez a tema_id-hez.
a struktúra:
tema : tema_id, cim
hozzaszolas: hozzaszolas_id, tema_id
repeatban van a tema kiiratása és azt szeretném ha mellette megjelenne a szám is hogy hány hozzászólas van.
Előre is kösz
Ghost

Bad Boys For Life!

(#16) L3zl13 válasza Ghostika (#15) üzenetére


L3zl13
(PH! nagyúr)

select count(hozzaszolas_id) from hozzaszolas where tema_id=X

Aki hülye, haljon meg!

(#17) Ghostika válasza L3zl13 (#16) üzenetére


Ghostika
(lelkes újonc)

Na éppen ez a baj hogy a tema_id=X helyére egy soronként változó értéknek kell kerülnie. Na ezt hogy?
És ezt a számot a lekérdezés után hogy iratom ki soronként?

Bad Boys For Life!

(#18) Ghostika


Ghostika
(lelkes újonc)

Végülis itt van a forráskód.
A html tagokat kivettem!
Ja Dreamweaver + saját kódot használok


mysql_select_db($database_my_Conn, $my_Conn);
$query_tema = ''SELECT * FROM tema'';
$query_limit_tema = sprintf(''%s LIMIT %d, %d'', $query_tema, $startRow_tema, $maxRows_tema);
$tema = mysql_query($query_limit_tema, $my_Conn) or die(mysql_error());
$row_tema = mysql_fetch_assoc($tema);

if (isset($HTTP_GET_VARS['totalRows_tema';])) {
$totalRows_tema = $HTTP_GET_VARS['totalRows_tema';];
} else {
$all_tema = mysql_query($query_tema);
$totalRows_tema = mysql_num_rows($all_tema);
}
$totalPages_tema = ceil($totalRows_tema/$maxRows_tema)-1;

$queryString_tema = '''';
if (!empty($HTTP_SERVER_VARS['QUERY_STRING';])) {
$params = explode(''&'', $HTTP_SERVER_VARS['QUERY_STRING';]);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, ''pageNum_tema'') == false &&
stristr($param, ''totalRows_tema'') == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_tema = ''&'' . implode(''&'', $newParams);
}
}
$queryString_tema = sprintf(''&totalRows_tema=%d%s'', $totalRows_tema, $queryString_tema);
?>
<p>Témák:</p>
<p> 
<?php do { ?>
</p>
<table width=''400'' border=''0'' cellspacing=''0'' cellpadding=''0''>
<tr>
<td><a href=''hozza.php?tema_id=<?php echo $row_tema['tema_id';]; ?>''><?php echo $row_tema['cim';]; ?></a></td>
</tr>
</table>
<p><img src=''shim.gif'' width=''1'' height=''10''>
<?php } while ($row_tema = mysql_fetch_assoc($tema)); ?>

Bad Boys For Life!

(#19) L3zl13 válasza Ghostika (#18) üzenetére


L3zl13
(PH! nagyúr)

$query_tema=''select tema_id,(select count(hozzaszolas_id) from hozzaszolas) as hozzaszolas, tema_cim from tema'';

Vagy

$query_tema=''select tema_id, count(hozzaszolas_id) as hozzaszolas, tema_cim from tema, hozzaszolas where tema.tema_id=hozzaszolas.tema_id group by tema_id,tema_cim'';

[Szerkesztve]

Aki hülye, haljon meg!

(#20) faster válasza L3zl13 (#19) üzenetére


faster
(PH! nagyúr)

Beágyazott select nincs mysql 4.0-ban, a 4.1 pedig még nem stable.

Próbáld ki ezt:

select tema.id as id, cim,count(tema_id) as darab from tema
left join hozzaszolas on tema.id = hozzaszolas.tema_id group by tema_id;

(#21) L3zl13 válasza faster (#20) üzenetére


L3zl13
(PH! nagyúr)

Aham, én DB2-t használok...

Második sem jó?

[Szerkesztve]

Aki hülye, haljon meg!

(#22) Ghostika válasza L3zl13 (#19) üzenetére


Ghostika
(lelkes újonc)

Bocs most lehet hogy lassú a felfogásom de honnan tudja hogy mi a tema_id?
Ja és akkor utánna csak: echo $query_tema?

Bad Boys For Life!

(#23) L3zl13 válasza Ghostika (#22) üzenetére


L3zl13
(PH! nagyúr)

A resultsetben minden egyes téma mellé berakja a count(hozzaszolas_id)-t is 3. oszlopként.

Aki hülye, haljon meg!

(#24) faster válasza L3zl13 (#21) üzenetére


faster
(PH! nagyúr)

Nem olvastam át alaposan, de jónak tűnik. A mezőnevek lehet, hogy nem stimmelnek az én példámban.

Szerk: Talán csak annyi a probléma, hogy a lekérdezésben nem lesznek benne azok a témák, amikhez nincs hozzászólás, de most ebben sem vagyok biztos.

[Szerkesztve]

(#25) L3zl13 válasza faster (#20) üzenetére


L3zl13
(PH! nagyúr)

Szerintem a tied valami mást csinál, bár az sem biztos, hogy működik.
A másik hozzászolas_id-nél nem kell megadni a táblát? Illetve nem kell group by-olni tema_cim szerint is?

Aki hülye, haljon meg!

(#26) L3zl13 válasza faster (#24) üzenetére


L3zl13
(PH! nagyúr)

Igaz, akkor valamilyen outer join kell.

$query_tema=''select tema_id, count(hozzaszolas_id) as hozzaszolas, tema_cim from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,tema_cim'';

[Szerkesztve]

Aki hülye, haljon meg!

(#27) faster válasza L3zl13 (#26) üzenetére


faster
(PH! nagyúr)

Ez jó lesz, bár mysql-nél az outer join nem tudom, csinál-e bármit is, de szerintem csak (hozzaszolas.tema_id) szerint kell grouppolni, tema_cim mező a hozzaszolas táblában nincs, ha jól látom.

(#28) faster válasza Ghostika (#22) üzenetére


faster
(PH! nagyúr)

Valami ilyesmit kell, hogy kapjál a resultset-ben:

+----+---------------------------------+-------+
| id | cim | darab |
+----+---------------------------------+-------+
| 3 | egyéb | 0 |
| 1 | Az élet nagy kérdései | 2 |
| 2 | Az élet nem olyan nagy kérdései | 3 |
+----+---------------------------------+-------+

Szerk: Az oszlopok elcsúsztak, remélem, a lényeg azért látszik.

[Szerkesztve]

(#29) faster válasza Ghostika (#18) üzenetére


faster
(PH! nagyúr)

Hehe. sprintf sztringösszefűzéshez? c++-os múlt? :D

(#30) Ghostika válasza faster (#29) üzenetére


Ghostika
(lelkes újonc)

Szal akkor mit írjal be?
mert az elöbbi tema kell külön mert azon az oldalon lehet egyben új témat is megadni.
szal egy új rekorset kell.
Na akkor oda mit írjak?
és a lekérdezésnél?
egyébként neten fent van:
[L]http://chriske.uw.hu/combi/new_theme.php[L]

Bad Boys For Life!

(#31) faster válasza Ghostika (#30) üzenetére


faster
(PH! nagyúr)

Nincs baj, csak furcsa a szememnek a sprintf PHP-ban.

$queryString_tema = sprintf(''&totalRows_tema=%d%s'', $totalRows_tema, $queryString_tema;

ezt php-ban így egyszerűbb:

$queryString_tema = ''&totalRows_tema=''.$totalRows_tema.$queryString_tema;

Remélem, nem írtam el.

(#32) L3zl13 válasza Ghostika (#30) üzenetére


L3zl13
(PH! nagyúr)

Szerintem próbáld meg ezt:

$query_tema='select tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,cim';

És a script végén a Do-while ciklusba beraksz még egy harmadik oszlopot a táblához, és egy ilyet:
<?php echo $row_tema['hozzaszolas';] ; ?>

[Szerkesztve]

Aki hülye, haljon meg!

(#33) faster válasza Ghostika (#30) üzenetére


faster
(PH! nagyúr)

Ez viszont:

$params = explode(''&'', $HTTP_SERVER_VARS['QUERY_STRING' ];
$newParams = array();


...miért kell?

Szerk: ÁÁáá, semmi, már kezdem sejteni.

[Szerkesztve]

(#34) Ghostika válasza faster (#33) üzenetére


Ghostika
(lelkes újonc)

THX!
de sajna nem megy.
ezt írja ki:Column: 'tema_id' in field list is ambiguous!
Na ez mi?

Bad Boys For Life!

(#35) L3zl13 válasza Ghostika (#34) üzenetére


L3zl13
(PH! nagyúr)

Próbáld meg a #32-ben lévőt.

Vagy a tema_id elé írj mindenhol egy tema. -t. (Kivéve a hozzaszolas.tema_id-t.)

[Szerkesztve]

Aki hülye, haljon meg!

(#36) Ghostika válasza L3zl13 (#35) üzenetére


Ghostika
(lelkes újonc)

Azt raktam be de akkor ezt írja ki.
De próbáltam már alőzővel is és akkor is ezt írta ki.
itt az egész forráskód:


<?php require_once('Connections/my_Conn.php'); ?>
<?php
$currentPage = $HTTP_SERVER_VARS[''PHP_SELF'';];
?>
<?php
session_start();
function GetSQLValueString($theValue, $theType, $theDefinedValue = '''', $theNotDefinedValue = '''')
{
$theValue = (!get_magic_quotes_gpc()) ? addslashes($theValue) : $theValue;

switch ($theType) {
case ''text'':
$theValue = ($theValue != '''') ? ''''' . $theValue . ''''' : ''NULL'';
break;
case ''long'':
case ''int'':
$theValue = ($theValue != '''') ? intval($theValue) : ''NULL'';
break;
case ''double'':
$theValue = ($theValue != '''') ? ''''' . doubleval($theValue) . ''''' : ''NULL'';
break;
case ''date'':
$theValue = ($theValue != '''') ? ''''' . $theValue . ''''' : ''NULL'';
break;
case ''defined'':
$theValue = ($theValue != '''') ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}

$editFormAction = $HTTP_SERVER_VARS['PHP_SELF';];
if (isset($HTTP_SERVER_VARS['QUERY_STRING';])) {
$editFormAction .= ''?'' . $HTTP_SERVER_VARS['QUERY_STRING';];
}

if ((isset($HTTP_POST_VARS[''MM_insert'';])) && ($HTTP_POST_VARS[''MM_insert'';] == ''form1'')) {
$insertSQL = sprintf(''INSERT INTO tema (cim) VALUES (%s)'',
GetSQLValueString($HTTP_POST_VARS['cim';], ''text''));

mysql_select_db($database_my_Conn, $my_Conn);
$Result1 = mysql_query($insertSQL, $my_Conn) or die(mysql_error());

$insertGoTo = ''new_theme.php'';
if (isset($HTTP_SERVER_VARS['QUERY_STRING';])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? ''&'' : ''?'';
$insertGoTo .= $HTTP_SERVER_VARS['QUERY_STRING';];
}
header(sprintf(''Location: %s'', $insertGoTo));
}

$maxRows_tema = 3;
$pageNum_tema = 0;
if (isset($HTTP_GET_VARS['pageNum_tema';])) {
$pageNum_tema = $HTTP_GET_VARS['pageNum_tema';];
}
$startRow_tema = $pageNum_tema * $maxRows_tema;

mysql_select_db($database_my_Conn, $my_Conn);
$query_tema = ''SELECT * FROM tema'';
$query_limit_tema = sprintf(''%s LIMIT %d, %d'', $query_tema, $startRow_tema, $maxRows_tema);
$tema = mysql_query($query_limit_tema, $my_Conn) or die(mysql_error());
$row_tema = mysql_fetch_assoc($tema);

if (isset($HTTP_GET_VARS['totalRows_tema';])) {
$totalRows_tema = $HTTP_GET_VARS['totalRows_tema';];
} else {
$all_tema = mysql_query($query_tema);
$totalRows_tema = mysql_num_rows($all_tema);
}
$totalPages_tema = ceil($totalRows_tema/$maxRows_tema)-1;

mysql_select_db($database_my_Conn, $my_Conn);
$query_counter =''select tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,cim'';

$counter = mysql_query($query_counter, $my_Conn) or die(mysql_error());
$row_counter = mysql_fetch_assoc($counter);
$totalRows_counter = mysql_num_rows($counter);

$queryString_tema = '''';
if (!empty($HTTP_SERVER_VARS['QUERY_STRING';])) {
$params = explode(''&'', $HTTP_SERVER_VARS['QUERY_STRING';]);
$newParams = array();
foreach ($params as $param) {
if (stristr($param, ''pageNum_tema'') == false &&
stristr($param, ''totalRows_tema'') == false) {
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString_tema = ''&'' . implode(''&'', $newParams);
}
}
$queryString_tema = sprintf(''&totalRows_tema=%d%s'', $totalRows_tema, $queryString_tema);
?>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv=''Content-Type'' content=''text/html; charset=iso-8859-1''>
</head>

<body>
<form name=''form1'' method=''POST'' action=''<?php echo $editFormAction; ?>''>
<table width=''400'' border=''0'' cellspacing=''5'' cellpadding=''0''>
<tr>
<td>Új Téma Neve:</td>
<td><input name=''cim'' type=''text'' id=''cim''></td>
</tr>
<tr>
<td> </td>
<td><input type=''submit'' name=''Submit'' value=''Új téma''></td>
</tr>
</table>
<a href=''hozza.php?tema_id=<?php echo $row_tema['tema_id';]; ?>''><?php echo $row_tema['cim';]; ?></a>
<input type=''hidden'' name=''tag_id'' value=''<?php echo $_SESSION[''tag_id'';]; ?>''>
<input type=''hidden'' name=''MM_insert'' value=''form1''>
</form>
<p>Témák:</p>
<p> 
<?php do { ?>
</p>
<table width=''400'' border=''0'' cellspacing=''0'' cellpadding=''0''>
<tr>
<td width=''250''> </td>
<td width=''150''> <?php echo $row_tema['hozzaszolas';]; ?> </td>
</tr>
</table>
<p><img src=''shim.gif'' width=''1'' height=''10''>
<?php } while ($row_tema = mysql_fetch_assoc($tema)); ?>
<table border=''0'' width=''31%'' align=''center''>
<tr>
<td width=''31%'' align=''center''> <?php if ($pageNum_tema > 0) { // Show if not first page ?>
<a href=''<?php printf(''%s?pageNum_tema=%d%s'', $currentPage, max(0, $pageNum_tema - 1), $queryString_tema); ?>''>Previous</a>
<?php } // Show if not first page ?> </td>
<td width=''23%'' align=''center''> <?php if ($pageNum_tema < $totalPages_tema) { // Show if not last page ?>
<a href=''<?php printf(''%s?pageNum_tema=%d%s'', $currentPage, min($totalPages_tema, $pageNum_tema + 1), $queryString_tema); ?>''>Next</a>
<?php } // Show if not last page ?> </td>
</tr>
</table>
</p>
<p>

</p>
</body>
</html>
<?php
mysql_free_result($tema);

mysql_free_result($counter);
?>

Bad Boys For Life!

(#37) Ghostika


Ghostika
(lelkes újonc)

Elég hosszú mert ha megnézted amit raktam linket akkor látod hogy itt megadod az új témanevet és egyböl hozzá is rakja + kiiratja a többi témát. Ebben már benne van a te változtatásod.
Ha van benne +kód akkor az azért van mert a Dreamweaver-rel csinálom!

Bad Boys For Life!

(#38) L3zl13 válasza Ghostika (#36) üzenetére


L3zl13
(PH! nagyúr)

Ezzel már mennie kéne:

$query_tema='select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim';

És ne kérdezd le külön a témákat meg a hozzászólások számát, ebben már mindkettő benne van!

Az eredményként kapott tábla első oszlopa az id, második a cim, harmadik a hozzászólások száma.

[Szerkesztve]

Aki hülye, haljon meg!

(#39) Ghostika


Ghostika
(lelkes újonc)

Már nem tom kipróbálni. Bocs de majd egy fél óra mulva otthon kiprobálom.Előre is Kösz a sok segítséget Ghostika

Bad Boys For Life!

(#40) L3zl13 válasza Ghostika (#39) üzenetére


L3zl13
(PH! nagyúr)

Ok, én is lépek. :))

Aki hülye, haljon meg!

(#41) faster válasza Ghostika (#36) üzenetére


faster
(PH! nagyúr)

Hu hu hú, de bonyolult.

Mindkét táblában van egy ''tema_id'' nevű mező, ezért helyette a ''táblaneve.tema_id'' jelölést kell használni.

select tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema_id,cim

helyett

SELECT hozzaszolas.tema_id AS tema_id, cim, count(hozzaszolas_id) AS hozzaszolas FROM tema LEFT OUTER JOIN hozzaszolas ON tema.tema_id=hozzaszolas.tema_id GROUP BY hozzaszolas.tema_id

Remélem, ez jó lesz.

(#42) Ghostika


Ghostika
(lelkes újonc)

Hi!
Sajna nem megy.Azt mondja hogy a hozzaszolas_id nincs a field listben!
Hogy gondoltad tea kiiratást?
Vagy hagyjak mindent úgy ahogy van és csak a SELECTET változtassam meg?
Egyébként nem tudtok konyvet vagy doksit amiben ez le van írva magyarul?
Előre is kösz

Bad Boys For Life!

(#43) L3zl13 válasza Ghostika (#42) üzenetére


L3zl13
(PH! nagyúr)

Hozzászólás id azért nincs a filed listában mert ott van az ''as hozzaszolas'' kifejezés.
Azaz utánna hozzaszolas-ként kell hivatkozni rá kiiratáskor.

Aki hülye, haljon meg!

(#44) L3zl13 válasza Ghostika (#42) üzenetére


L3zl13
(PH! nagyúr)

A teljes kódon nincs kedvem túlrágni magam mert elég bonyolult.
De próbálom elmondani:
Alaphelyzet:
$query_tema = ''SELECT * FROM tema''; volt a lekérdezés.
Eredményeképp kaptál egy kétoszlopos tömböt amit kiírattál egy kétoszlopos táblába, soronként ciklusból.

A fenti lekérdezés HELYETT:

$query_tema='select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim';
Eredménye egy 3 oszlopos tömb. Amit egy 3 oszlopos táblába íratsz ki ugyanúgy mint az alapverzióban.
Az első 2 oszlop változatlan kell hogy legyen, a 3. oszlop neve ''hozzaszolas''. És az adott témához tartozó hozzászólások számát tartalmazza.

Semmi más művelet nem szükséges az alaphelyzethez képest.



[Szerkesztve]

Aki hülye, haljon meg!

(#45) Ghostika válasza L3zl13 (#44) üzenetére


Ghostika
(lelkes újonc)

Thx mindenért!
Megy. Kiderült hogy az volt a baj hogy nem hozzaszolas_id hanem csak hozza_id volt a neve a tablanak.
nem tudsz valami jó könyvet amiben ez le van írva?
kösz mindent:Ghost

Bad Boys For Life!

(#46) L3zl13 válasza Ghostika (#45) üzenetére


L3zl13
(PH! nagyúr)

Sajnos nem tudok.

De őszintén szólva nem is kerestem ilyen irodalmat, mert az SQL-lel nincsenek gondjaim.

Talán valami 'Teach yourself SQL in 21 days' vagy hasonló jó lehet alapnak.

Aki hülye, haljon meg!

(#47) Ghostika válasza L3zl13 (#46) üzenetére


Ghostika
(lelkes újonc)

Azt esetleg el tudod magyarázni röviden mit miért így írtál?
Ja meg azon is gondolkodtam hogy hogy lehetne az utolsó hozzászólót kiiratni?
ahoz érdemes új lekérdezést csinálni?

Bad Boys For Life!

(#48) L3zl13 válasza Ghostika (#47) üzenetére


L3zl13
(PH! nagyúr)

Ha az SQL stringre gondolsz akkor:

select tema.tema_id, cim, count(hozzaszolas_id) as hozzaszolas from tema left outer join hozzaszolas on tema.tema_id=hozzaszolas.tema_id group by tema.tema_id,cim

Az eleje gondolom egyértelmű, a lényeg, hogy ne *-ozz mert akkor nem nagyon tudsz count meg hasonló kifejezéseket használni.Ehelyett szépen felsorolod azokat az oszlopokat amire szükséged van.
A count(xyz) azt jelenti, hogy nem kiírja egyenként az xyz-ket, hanem csak megszámolja őket.
Pl ha az lenne a query, hogy ''select count(tema_id) from tema'' akkor csak egy számot kapnál eredménynek. Mégpedig a témák számát.

az 'as hozzászólás' azért van, hogy könnyebben lehessen hivatkozni a fügvény eredményeképp kapott mezőre kiíratáskor.

'from tema' gondolom egyértemű

left outer join - ezzel kapcsolod össze a két táblát, mégpedig olyan módon, hogy a baloldali tábla (left) minden eleme szerepel az eredményképpen kapott összesített táblában, míg a jobboldali táblából csak azok az elemek, amelyek az összekapcsolási feltételnek megfelelnek.

hozzaszolas - a másik tábla neve

on tema.tema_id=hozzaszolas.tema_id - Az összekapcsolási feltétel. Innen tudja, hogy a hozzaszolas táblábol melyik sor a tema tábla melyik sorához tartozik. (Ahol a tema_id -k megegyeznek.)

group by tema.tema_id,cim - csoportosítás tema_id és cím szerint. Ez azért kell, hogy a hozzászólások táblát a count-nál ne egybe vegye, hanem tema_id-nként számolja össze a hozzászólások számát.

Utolsó hozzászólóhoz szerintem külön lekérdezés kell.

Aki hülye, haljon meg!

(#49) VladimirR


VladimirR
(PH! nagyúr)

gyenge idegzetuek nme olvassak el, mert hulyesegeket fogok kerdezni

kezdeskent: sem a php-hez, sem a mysql-hez nem ertek, a heten kezdtem vele foglalkozni

arra gondoltam, csinalok egy oldalt php+mysql komboval
a kerde az lenne, hogy mit lehet bepakolni adatbazisba
csak mert en mindent szeretnek (sot a menu-t mar most is onnan olvassa, mas meg nincs kesz)
tehat: megoldhato-e (illetve valoszinuleg megoldhato, de elonyos-e), hogy pl a hoszabb irasok (tobb oldal) is az adatbazisban legyen (pl cikkenkent, vagy oldalankent)
ha igen, akkor mikent kellene tarolni? nekem a longtext (vagy hasonlo) szimpatikusnak tunik neve alapjan, de mint mar mondtam nem ismerem a mysql-t (sem)
tehat megoldhato lenne ez igy szerintetek?
thx

(#50) Higi válasza VladimirR (#49) üzenetére


Higi
(újonc)

Lehetséges. Letárolhatod a cikk írójának nevé, íméljét, na és a cikk tartalmát. Véleményem szerint tökéletesen megfelel egy Text típus is.:U

Copyright © 2000-2012 PROHARDVER Informatikai Kft.