Aktív témák
-
kismukk
csendes tag
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:))
-
L3zl13
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éteAki hülye, haljon meg!
-
kismukk
csendes tag
Köszönöm válaszod. Kipróbálom!
:))
-
klinsi
csendes tag
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?
Elore is koszi: klinsi -
klinsi
csendes tag
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 -
VladimirR
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 -
Fisha
őstag
válasz VladimirR #11 üzenetére
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] -
Ghostika
csendes tag
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
GhostBad Boys For Life!
-
Ghostika
csendes tag
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!
-
L3zl13
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!
-
faster
nagyúr
-
-
faster
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] -
Ghostika
csendes tag
-
faster
nagyúr
-
L3zl13
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!
-
Ghostika
csendes tag
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!
-
Ghostika
csendes tag
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!
-
L3zl13
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!
-
Ghostika
csendes tag
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!
-
faster
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. -
Ghostika
csendes tag
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öszBad Boys For Life!
-
L3zl13
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!
-
L3zl13
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!
-
VladimirR
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
Aktív témák
- Anime filmek és sorozatok
- OFF TOPIC 44 - Te mondd, hogy offtopic, a te hangod mélyebb!
- Frissült a MediaTek középkategóriás ajánlata
- ASUS routerek
- WLAN, WiFi, vezeték nélküli hálózat
- Total Commander
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Amazon
- 3D nyomtatás
- Kínai, és egyéb olcsó órák topikja
- További aktív témák...