Belső levelezőrendszer(facebook módon)
Sziasztok!!
Nekem már van egy alap belső levelezőrendszerem ilyen fülekkel:
-új üzenet írása
-bejövő üzenet
-kimenő üzenet
Ha rákattintok a nevére és küldök egy üzenete addig rendben.
Aztán felküldjük
elsőként a küldő nevét aztán címzettet a dátumot is és útólsóként hogy a címzett meg nézte a levelet vagy sem.
Okés eddig nincs hiba.
Hogy csináljam meg azt hogy ha beléptem az üzenetek közé akkor akinek már írtam annak a nevét csak egyszer írja ki és ugyan ez fordítva a másik félnek?
A másik ha rákattintok akkor ki listázza a vele beszélgetett üzeneteket.
Ezt szeretném megoldani.
Hogyan tudnám?
Ha valaki valamit nem ért szóljon!
■ Nekem már van egy alap belső levelezőrendszerem ilyen fülekkel:
-új üzenet írása
-bejövő üzenet
-kimenő üzenet
Ha rákattintok a nevére és küldök egy üzenete addig rendben.
Aztán felküldjük
elsőként a küldő nevét aztán címzettet a dátumot is és útólsóként hogy a címzett meg nézte a levelet vagy sem.
Okés eddig nincs hiba.
Hogy csináljam meg azt hogy ha beléptem az üzenetek közé akkor akinek már írtam annak a nevét csak egyszer írja ki és ugyan ez fordítva a másik félnek?
A másik ha rákattintok akkor ki listázza a vele beszélgetett üzeneteket.
Ezt szeretném megoldani.
Hogyan tudnám?
Ha valaki valamit nem ért szóljon!
group by, where
GROUP BY
WHERE
ha valaki nem ért valamit, használja az adatbáziskezelőjének dokumentációját!
Minek gondolkodni?
$result = mysql_query("SELECT
eddig eljutottam csak másét is behozza.
hogy lehetne megoldani? pl egy csoport kódot csinálni(véletlen szerű kód)és úgy azonosítani?
Ezt a csoport kódot úgy csinálnám elején csinál egy kódot első küldésnél.
A bejövőnél rá kattintok a nevére ahol a csoport kód egyezik és kilistázom azokat a sorokat.
Jó elv?
könnyebb volna segíteni, ha
REATE TABLE `emails` ( `id`
elméletemet meg próbálom meg valósítani:)
általam küldött
SELECT COUNT(*) AS levelszam, cimzett
FROM emails
WHERE felado='enmagam'
GROUP BY cimzett
ORDER BY cimzett
nekem küldött üzenetek
SELECT COUNT(*) AS levelszam, felado
FROM emails
WHERE cimzett='enmagam'
GROUP BY felado
ORDER BY felado
kb ennyi szerintem.
amúgy a feladót meg a címzettet érdemesebb volna id-vel tárolni ebben a táblában. egyrészt a keresés is hatékonyabb lesz, másrészt meg úgy kell és kész :D (ha változik a felhasználónév, akkor csak egy helyen kell átírni, így meg sok helyen, mindegy nem megyek bele)
remélem segítettem
köszönöm sztem már menni
szerk.:
na tegyük fel van két felhasználó.
eminem,jancsi
eminem 19:30
jancsi 18:23
eminem 14:50
jancsi 12:10
így meg jelenik nálam a dolgok a dolgok.
azt szeretném hogy így nézzen ki
eminem 19:30
jancsi 18:23
vagy is a legfrissebb üzenetek legyenek meg.
GROUP BY val csak az eminem 19:30 jelent meg .
GROUP BY val is meglehetne oldani sztem csak akkor a felhasználókat meg kéne különböztetni.
hogy lehetne?
MAX
meg van a dátum max értéke és
mysql_query("SELECT MAX(datum) AS datum,felado,cimzett,email FROM emails where cimzett='$id' or felado='$id' AND cimzettdel ='0'GROUP BY cimzett ORDER BY datum DESC");
már csak a
felado email résznek kéne a max értéke vagy is az utolsót meg kapnom.
hogyan?
MAX() ba nem lehet 1 nél több értéket meg adni:(
pl MAX(datum,email) AS level.
Ezt is ki lehet küszöbölni?
Legyetek szívesek segíteni!!!
nem
De többször is alkalmazhatod
Pontosabban
- a
VARCHAR (1)
például távolról sem boolean, akkor inkábbTINYINT(1)
;- a levél státuszát célszerű(bb) egy mezőben tárolni (törölt/olvasott/etc);
- szerintem egy saját "levelezőrendszer" leveleinek tárolására sem elegendő egyetlen tábla.
Kriszrap, ismét bizonyítottad kérdezőtehetséged! Kevesebb kapkodással és több odafigyeléssel még jót is tudnál létrehozni, ráadásul összességében kevesebb energiádat vinné el. (És másokéból is.) Nekem mindegy, én ismét jól szórakoztam, de neked jobb lenne, hidd el.
most miért bántod? legalább
nem születik mindenki
OFF:De nem is töri össze
Amit nem találok meg googleba az az én hibám??? Bocsánat hogy segítségeteket kérem pár dologba. Sorry!!
ON: Akkor majd kipróbálom a kódot ha haza értem.
Amit nem találok meg googleba
akkor minek a fórum ha
pepita!!
miben jobb a TINYINT mint a varchar???
Fórum
Na, öcsém!
Ha nem kapod most már tényleg össze magad, komolyan megharagszom. Azonnal nézd végig a korábbi fórumtémáidat (követő), hogy azokban miket kértünk már többen is tőled formailag és külalakban!
Mit képzelsz, te lusta vagy az én kommentemre válaszolni/visszakérdezni (külön), én meg nyitogassam a te témádat több ablakban, hogy kihámozzam az általad összebogozott szálakat - amikor mi segítünk neked?! Az, hogy ennyire minimális figyelmesség sincs benned irántunk a saját ügyed érdekében, már tiszteletlenség. Akkor meg mit vársz cserébe? Megelőlegezett válaszomért cserébe válaszolj erre értelmesen. Én elhiszem (ha így van, de nem tudom), hogy egy 88. dackorszakban lévő tizenéves valaki vagy, de vedd figyelembe, hogy itt "komoly fölnőttek" vannak, akikkel komolyan kell viselkedni, főként ha kérsz tőlük valamit. (De akkor is, ha netán te adsz.)
Tehát:
Miben jobb a TINYINT, mint a varchar?
Nem jobb - más. MySql dokumentációját jól nézd át: vannak különböző táblatípusok és ezeknek különböző mezőtípusai. Szemben pl. a PHP programnyelv gyengén típusosságával, az adattárolás az adatbázisokban gyakorlatilag mindig típusos. Tehát, ha egész számot akarsz tárolni, akkor használj xxxINT típusú mezőt, ha szöveget, akkor pl. VARCHAR vagy xxxTEXT mezőt, ha boolean (igaz/hamis) értéket, akkor BOOL mezőt.
Ez utóbbit azonban a MySql (MyIsam táblatípus esetén) TINYINT(1)-ként tárolja, mert nincs valódi BOOL mező (mert azt 1 biten kéne tárolni, viszont technikai okokból min. 1 byte-ot tárol egy mezőben, ez pedig u.az, mintha TINYINT(1) lenne). Ha lenne valódi BOOL mező, akkor is 1 byte-on tárolná.
Szóval a lényeg az, hogy ahol javasoltam - most tényleg csakazértsem néztem vissza -, ott te egy igaz/hamis értéket akartál tárolni VARCHAR(1)-ként, erre a boolean-ra viszont sok szempontból jobb helyettesítő az 1 byte-os egész szám. Ha ezt jól használod, akkor a gyengén típusos PHP-vel "megetetheted" boolean-ként, ami a feltételek kezelésekor nagyon hasznos lehet. Ezzel kapcsolatban olvasd el a PHP manual 11. fejezetét.
Tehát ha nincs pont az az adattípus, ami neked kéne, akkor a lehető legközelebb állóval próbáld helyettesíteni. (Itt most nem akarok az 'enum'-mal kavarni.)
Itt a lényeg
Nem bántom,
Pont ezt jeleztem.
Elolvastam minden comentet és
jobban oda fogok figyelni hogy mit írok és hogyan.
Olvasgattam egy kicsit és találtam egy sqlbe egy last parancsot és nekem jól jönne az email mezőmhöz. Nem akarja valamiért elfogadni:( .
Lehet elírtam vagy valami rosszul csináltam.
A kód :
Miért nem fogadja el?? Nem értem.
Hirtelen ránézésre
2. hol találtad a LAST() -ot, és milyen DB -t használsz?
3. Mi ez?
cimzettdel lehet már null?
Szerintem: Kevesebb olló -> több olvasás!
Pepita:
Na ilyet se hallottam még tőled! :))
Mármint milyet?
Dehogyis :)
Általában te is, mint Poetro, birka-türelemmel szoktad magyarázni tovább a delikvenseknek. :)
Hozzáteszem abszolút jogos volt, nem ez volt a meglepő! :)
Köszi, de...
LAST?
Bocsi iddqd elírtam hibáztam
http://www.w3schools.com/sql/sql_func_last.asp
ki választjuk azokat a sorokat ami "hozzám tartoznak "($id)
(felado = '$id' or kitol='$id')
dátum szerinti csökkenő sorrend ORDER BY datum
címzett tömben egy név egyszer szerepeljen (GROUP BY cimzett)
megadom mindegyik csoportnak a max dátumát
pl
eminem 14 50
eminem 19 00 <---- ez lesz a max érték
emailba szöveget tárolok.
próbálkoztam email tömbe max-al meg kapni az utolsó értéket meg ha van azonos érték vagy is mondjuk írom azt hogy 1x hello és utolsónak írom hogy hello akkor csak az elsőt nézi. MAX funkció csak számoknál használható???
Aztán rákerestem netten és rátaláltam a last parancsra
csak nem jó.
Miért?
előre is köszönöm.
Valami nem érthető szóljatok!
szerk.: csináljam úgy ahogy ajánlottátok hogy minden felhasználónak van egy email táblája?
így nézzen ki a tábla név?:
kriszrap_emails
jenö_emails
vagy 1_emails
4-emails
(a számok az idre utalnak)
szerintetek?
Pontatlan
A 'GROUP BY cimzett' miatt egyetlen rekordot fogsz kapni (a legelsőt) azon rekordok közül, melyeknek u.az a 'cimzett' adata. Tehát nem biztos, hogy a legfrissebbet, stb., ehhez inkább WHERE kellene. Pl. a legutóbbit megkaphatod úgy is (egy emberét), hogy
csak nem jó.
Adatbázisterv: ezzel kell kezdeni. Addig semmi lekérdezgetés, amíg ez nincs kész, vagy rossz. Szerintem user_id alapján véletlenül se csinálj táblákat, az ilyen üzemelés közben előállított újabb és újabb táblák többnyire tervezési hibák eredményei, igen ritkán kell ilyesmire vetemedni. Az elején, ha jól tudod specifikálni a feladatot, az már egy "fél adatbázisterv" volna. A lényeg, hogy minden körülményt / csoportot / funkciót egyenként jól forgass meg a fejedben, szép kerek mondatokban mondd ki előbb vagy háromszor, ezután írd le egy temp. doksiba. Ha azt hiszed, hogy kész, akkor még párszor olvasd át és javítsd a hibákat... Erre szánj sok türelmet és időt, mert az egész műved múlik rajta. Egy jó szoftver összes munkaidejének 50-80%-a tervezés, tehát a kódolás a jóval kisebb része (és jó terv alapján már szinte gyerekjáték).
Alapjában véve okos srác vagy, szerintem meg tudod csinálni.
köszönöm a segítséged!!Ahogy
Ahogy ezt leírtad hogy
akkor kezdtem el gondolkodni ,azt tenném hogy mindenkinek vagy egy saját email táblája meg is csináltam első belépésnél meg alkotja a táblát csak user id alapján. Amikor meg akarom nézni a felhasználóval beszélt üzeneteket azt pedig INNER JOIN al tettem volna. Pontosabban az ö táblájából kiválogatnám a saját üzeneteim és az ennyémből az övét. Előbb írtad nem annyira hatékony módszer hogy külön külön tábla ha jól értettem. Te hogy csinálnád? Másik elképzelésem is van hogy a bejövök és a kimenőknek külön tábla. Ez is jó módszer??
Szerintetek?
szerk.: átgondoltam az utolsó módszerem az szerintem hülyeség.
Kanyargós...
1. Fognék egy tollat, papírt (tényleg néha így csinálom) és nekiülnék megtervezni az adatbázist (természetesen a kész feladatspecifikáció alapján). Ezt már leírtam részletesen, én is úgy csinálom (a hangos szöveg nélkül, mert én anélkül is tudok értelmes mondatokat írni. Bocs, nem bántás akart lenni, de ilyenkor tényleg jobb előbb kimondani.)
2. Ha valami miatt 1. nem sikerül elfogadható időn belül, akkor Álláshirdatés rovat...
Szóval szerintem még mindig kissé ide-oda kapkodsz, kihagytad a specifikációt/programtervet, mondván, hogy a honlap "nagyrészt kész". Légyszíves ülj le és tervezz, ami most van, az egy káosz, azt tedd félre!
Csinálj magaddal egy rendes honlapinterjút. Ezután egy honlaptervet, mindkettőben jó segítségek Nagy Gusztáv anyagai, de nem ez a minden, kell hozzá a te eszed is.
Ezután, ha ezek készen vannak, lehet adatbázist tervezni. Jó lenne, ha az első kettőt is "bemutatnád". (Szép külalakban!)
Ha ezt jól csinálod, megtanulsz felépíteni egy honlapot. (És nem összeb....ni.)
Meg mutatom mit is szeretném
9_email tábla, 10_email tábla, 12_email tábla
kriszrapé eminemé krissz1996é
Tételezzük fel kriszrap kül egy üzenetet eminem nek
akkor feladó kriszrap lesz és a címzett eminem és ezt elküldi eminem táblájába.
Kriszrapnek lesz egy "másolat" annyi különbséggel hogy felado helyet "én" értéket kap.
Mostani táblám így néz ki.
2 eminem küldte nekem vagy is kriszrapnek
3 eminem küldte nekem vagy is kriszrapnek
és így néz ki:
eminem (felado = én,cimzett=10)
^--csákány
2012-08-31 14:22:50
eminem (felado = 10,cimzett=9)
mi van ember?
2012-08-31 14:24:48
eminem (felado = 10,cimzett=9)
jaaa
2012-08-31 14:25:41
ahol ezt "^--" látjátok én vagyok vagy is kriszrap(9 id).
így szeretném megcsinálni:
eminem (felado = én,cimzett=10)
^--csákány
2012-08-31 14:22:50
próbálkoztam így GROUP BY,felado,cimzett
és ez jött ki
eminem
^--csákány (felado = én,cimzett=10)
2012-08-31 14:22:50
eminem (felado = 10,cimzett=9)
jaaa
2012-08-31 14:25:41
és ez a nem a legfrissebb adat.
hogy tudnám megoldani hogy csoportok legyenek és a max értéket adja ki??? pl (kriszrap,eminem)csoport ja és az ucso üzenet. (kriszrap,krissz1996)csoport és az ucso üzenet.
Nem tudok segíteni
Jó lenne, ha az első kettőt
Email táblára gondolsz? Ha igen akkor itt van:
vagy is 10 id felhasználó 9 es felhasználónak küldte.
2. üzenetnél csak kiolvassuk és ezen group_iden megy végig a beszélgetés.(könnyebb be azonosítani az üzeneteket és listázni.)
Az a célom már csak (mert a többit egyedül meg tudtam csinálni) hogy aki küldött üzeneteket ez több felhasználó is lehet annak felhasználónak vagy nekem legfrissebb üzenetét listázza ki.
vizuálisan a célomról:
group_id sokat segít most mert ilyen csoportjaim lesznek:
13@3
10@9
ennek a csoportnak a legfrissebb üzenetét sorát dátum alapján kilistázni.
érthető így vagy megint mellé beszélek?
Jó tanács
http://kiado.kiskapu.hu/main.php?SHOW_BODY=books&OP=detailed&PROD_ID=2
valami alapszintű mysql könyvet szerezz be (nem kell megvenned, van könyvtár is). olvasd el, próbálgasd. nem könnyű, de sikerülhet.
amikor válaszolok a kérdéseidre, csak szórakozásból teszem. eltelik az idő. sajnos tudom, hogy annyira mély vízben mozogsz, hogy nem fogod megérteni. itt a lényeg. értsd meg amit csinálsz. így csak a saját idődet pazarlod. képezd magad, tanulj meg angolul, stb.
ha nem akarsz megtanulni tanulni, megtanulni angolul, ne pazarold az idődet erre a területre, mert a nehezen megszerzett egyéb tudásod hamar használhatatlanná válik.
csak annyit írjatok le hol
sok tábla
Jóval több helyen,
nem akarok senkit se hülyére
csak nem tom hogy lenne jó mert írtak nekem ilyet is:
Meg Pepita írtad hogy ne külön táblázatba.
Akkor hogy?
És lehet hogy buta vok de akkor abba helyzetbe nem értettem .
Tenni kell
sikerült megoldanom:) egy új
Ebbe megjelölöm az ucso üzenetet és igy wherel ki keresem és ennyi:)