Kezdőoldal » Számítástechnika » Weblapkészítés » Hogy írjam meg ezt a MYSQL...

Hogy írjam meg ezt a MYSQL lekérdezést? Már megbolondulok tőle!

Figyelt kérdés

Összesen 4 táblából szeretnék lekérdezni adatokat, ezt UNION utasítással csináltam meg.

Az utasítással azokat a sorokat szeretném kiírni, ahova én már hozzászóltam, és ez után érkezett oda új üzenet.


Tehát ahol a küldő az én ID-m, az üzenet időbélyege nagyobb, mint az általam küldött utolsó üzenet időbélyege az adott fogadó fél adatlapján.

Tehát:

(

SELECT

users.name AS name, users.id AS id,

kommentek.fogado AS fogado, kommentek.uzenet AS uzenet, kommentek.timestamp AS timestamp, kommentek.uzenet_id AS uzenet_id

FROM

users, kommentek

WHERE

kommentek.kuldo='$my_id'

AND

kommentek.timestamp>(SELECT MAX(timestamp) FROM kommentek WHERE kuldo='$my_id' AND fogado='????')

)

UNION

...

...

...

ORDER BY timestamp DESC LIMIT 20


Nem tudom hogy hivatkozzak a fogadóra.

Egy adott adatlapról csak 1 üzenet érdekel, mégpedig az, ami az én hozzászólásom után érkezett (de csak ha volt hozzászólásom ott).


Nem tudom ez így érthető e. Ez a lekérdezés meghaladja a tudásomat sajnos.



2014. jún. 19. 21:29
 1/9 Tengor ***** válasza:

Első: '$my_id' < ez micsoda? PHP váltózót így nem helyettesítünk be!

Hogy néz ki pontosan a 4 tábla?

2014. jún. 19. 21:40
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

a táblák szerkezete így néz ki:

table_id,kuldo,fogado,uzenet,timestamp,uzenet_id.

mind a 4 tábláé, csak egyik az adatlap alatti kommenteké, a másik egy üzenőfalé, stb stb.

Ezekből szeretném lekérdezni az általam küldött utolsó üzenet után érkezett 1 darab üzenetet.

A $my_id -t azt a felhasználó a bejelentkezéskor kapja meg, ez az ő saját azonosítója, erre sok helyen tudok hivatkozni, hogy kiről van éppen szó. egyébként miért nem jó az úgy?

2014. jún. 19. 22:11
 3/9 Tengor ***** válasza:

Miért nem jó? SQL injection. Keress rá! Ha ez megvan, akkor nézz után a PDO-nak és a mysqli-nek valamint a prepared statementnek!


A tárolási mód nem túl szerencsés. Ha minden tök ugyan az, ahogy írtad, akkor egyszerűbb lenne egy tábla, és annak lenne egy mezője, ami alapján el lehetne dönteni, hogy melyik melyik üzenőfalról van szó pontosan.


Egy táblára:

SELECT k1.* FROM komment AS k1 WHERE k1.timestamp > (SELECT k2.timestamp FROM komment AS k2 WHERE k2.kuldo = ? ORDER BY k2.timestampe DESC LIMIT 1) ORDER BY k1.timestamp DESC LIMIT 20


Lehet, hogy nem sikerült pontosan leírni, de a lényeg: a belső lekérdezés meghatározza az "én" utolsó hozzászólásom idejét. Az külső lekérdezés pedig listázza azokat a hozzászólásokat, amik ettől régebbiek.

2014. jún. 19. 22:25
Hasznos számodra ez a válasz?
 4/9 A kérdező kommentje:

a kuldo utáni kérdőjel mit takarna, vagy ez egy bevett módszer?

légy szíves részletezd kicsit.

egyébként nem értem, hogy a $my_id változó miért veszélyes, mert ez egy szerver oldali változó, ezt nem tudják módosítani.

de ha rosszul tudom javíts

2014. jún. 20. 01:28
 5/9 Tengor ***** válasza:
69%

Írtam, hogy minek nézz utána! Ha megnézed, akkor rájössz, hogy mi az a kérdőjel.

Ha biztosan szerver oldali a váltózó, akkor nem olyan veszélyes a használata, de mivel semmivel nem kerül többe tisztességesen megírni, ezért célszerű mindig a már írt technikákat használni, így véletlenül sem lehet olyan, hogy átengedsz valamit, amit nem kellene.

2014. jún. 20. 07:31
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

köszönöm a segítséget! még egy egyszerű kérdésem van.

a $_SESSION az egy szerver oldali változó?

tehát azt nem tudja módosítani a látogató?

2014. jún. 20. 13:40
 7/9 anonim ***** válasza:
Módosítani nem, csak a használatát letiltani. (cookiek letiltásával)
2014. jún. 20. 21:24
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
Szerver oldali változót sem mindig biztonságos használni.
2014. júl. 5. 09:58
Hasznos számodra ez a válasz?
 9/9 anonim ***** válasza:
Megváltoztatni elvileg nem tudja, hacsak nem inputból hozod, de simán lenullázhatja.
2014. júl. 5. 21:48
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!