Jump to content
GSForum - Segélyvonal

SQL kérdésem van


google

Recommended Posts

arpsoft

A register globals nem véletlenül van alapból kikapcsolva. Biztonsági rés!

Éppen ezért nem szokták a szolgáltatók bekapcsolni.

 

Erre ma már nem érdemes építeni egy php oldal tervezésénél.

Link to comment
Share on other sites

  • 2 weeks later...
vtcorp

Bocseszka de nem oldastam végig a témát (csak ez elejét)

de az a problémám hogy nem tudom hogy kell a mysql telepítésénél a dolgokat beállítani

Link to comment
Share on other sites

google

Muszáj külön telepíteni a MYSQL-t? Szerintem sokkal többre mész, ha pl. az Easyphp -val telepíted.

Link to comment
Share on other sites

apacs

Szerintem is. ;) Ha valamiért az Easyphp nem tetszene akkr pedig ajánlom az Appserv-et.

Link to comment
Share on other sites

  • 2 weeks later...
google

Azon tûnõdöm, hogy hogyan kérdezhetném le egy tábla tartalmát az azonosító szerint visszafelé, de úgy, hogy hátulról csak az ötödiktõl induljon el.

Azaz az elsõ kiírandó rekord a 20-as legyen, a következõ a 19-es, 18-as, és így tovább (amennyiben ugye pl. 25 rekord van benne).

Link to comment
Share on other sites

atzs

Accessben kipróbáltam, megy, tehát a kód:

 

SELECT alap.alp_lelet_sorszám, alap.kontroll
FROM alap
WHERE alap.alp_lelet_sorszám<(SELECT MAX(alap.alp_lelet_sorszám) FROM alap)-100
ORDER BY alap.alp_lelet_sorszám DESC

Edited by atzs
Link to comment
Share on other sites

google

Ezt a max-ot nem ismertem :upsz: , és teljesen logikusnak tûnik, mégsem megy, mert nem talál ennek megfelelõ bejegyzést, pedig van, az teljesen egyértelmû. :(

Link to comment
Share on other sites

atzs

Egyrészt van néhány összegzõfüggvény: COUNT, MAX, MIN, SUM, AVG

 

Azt érdemes róluk tudni, hogy egy SELECT utasításben nem lehet oszlopnévvel keverni õket, pl.

SELECT tabla.mezo1, max(tabla.mezo2)

garantáltan hibát ad.

 

Másrészt lehet használni beágyazott lekérdezéseket, mint ahogy a WHERE után tettem. Ezeket zárójelbe kell tenni, ha minden igaz.

Link to comment
Share on other sites

google

Köszönöm a segítséget, de sajnos nem értem, miért nem megy.

Itt a kódom:

 

$query2 = "SELECT * FROM hirek WHERE<(SELECT MAX(azon) FROM hirek)-4 ORDER BY azon DESC";
$result2 = mysql_query($query2,$kapcsolat);

 

Erre semmit nem listáz ki, mintha nem volna max(azon)-4 - ami egyébként jelen pillanatban 2.

Link to comment
Share on other sites

Athos

@google

SELECT * FROM hirek WHERE ???<(SELECT MAX(azon) FROM hirek)-4 ORDER BY azon DESC

 

Mihez hasonlítod a beágyazott SELECT által visszaadott értéket? A kérdõjelek helyére kell valami. Gondolok a HIREK tábla AZON mezõje. ;)

 

@atzs

A példádnál maradva. Akkor lehetséges, ha GROUP BY-t alkalmazol a tabla.mezo1-re. ;)

Link to comment
Share on other sites

google

... :mérges::upsz: Már megint baromi figyelmetlen vagyok.

Ezen sürgõsen változtatnom kell.

 

Köszönöm Athos, úgy látszik, szólni kell, ha már magától nem szúrja ki a szememet. :cenzúra::fal:

Link to comment
Share on other sites

atzs

@athos

De akkor már mást csinál. Nem annyi sort ad vissza, ahány sora a táblának van, hanem ahány különbözõ értéke mezo1-nek, és mezo1 minden értékére külön-külön kiszámítja a hozzájuk tartozó mezo2-k maximumát.

 

SELECT alap.kontroll, max(alap.alp_lelet_sorszám) AS maximumka
FROM alap
GROUP BY alap.kontroll

 

Ajánlom figyelembe az AS szócskát, amellyel aliasnevet lehet adni az oszlopnak. Ilyenkor e nélkül a gép saját maga nevezi el.

 

Az elõzõ példámtól viszont azt várná az ember, hogy az elsõ oszlopba szépen kiírogatja mezo1 értékeit egyesével, a második oszlopban pedig minden sorba kiírja a mezo2 oszlop legnagyobb értékét. Na ez az, amit így nem lehet.

 

(Csak azok kedvéért írtam le, akiknek ez még újdonság. Athos nyilván nem tartozik közéjük. ;) )

Link to comment
Share on other sites

arpsoft

Sokat jelenthet nagy táblák esetén, ha elõször megkeresed a max értéket egy lekérdezéssel:

 

select max(id) from éntáblám 

Majd ezt felhasználva hívod meg a tényleges lekérdezést:

select * from éntáblám where id<sql_eredmény-5 order by id desc

 

Ennek az az elõnye az összetett lekérdezéssel szemben, hogy a belsõ lekérdezés nem fut le minden egyes rekordra.

Link to comment
Share on other sites

Athos

@atzs

Igaz, de én arra írtam, hogy lehet használni több oszlop esetében is mondjuk a MAX függvényt. ;) Egyébként ismerem az AS-t. ;)

 

@arpsoft

Ha belsõ SELECT-tel csinálnám, akkor esetleg az adatbáziskezelõ nem optimalizálna, hogy csak egyszer értékeli ki? Szerintem elemezhetõ, hogy minden egyes esetben ugyanazzal térne vissza, de ebben nem vagyok biztos. :hááát:

Tény, a javaslatod tutira gyorsabb. :)

Link to comment
Share on other sites

  • 4 weeks later...
Kovács Dávid ( Davs )

Hy! Én egy query-t akarok csinálni, ahol több feltétel van. Tehát select * from x where itt hogyan kell elválasztani a feltételeket? Vesszõvel?

Ja, és ez csak egy megjegyzés. Új designot csinálok a weboldalamnak, a hírlevelet is átdolgozom, teljesen automatizáslom. Ha valaki le akar jelentkezni, akkor kell a neve, jelszava, mail címe. Ha csak 1 sor lesz az eredmény, akkor helyes, amit írt nem? Tehát akkor egy rekordban van a megadott név, jelszó, cím?

Link to comment
Share on other sites

google

A feltételeket az AND-del kötheted össze:

 

SELECT WHERE sor = 'valami' AND sor = 'másvalami'

Ha 1 sor az eredmény, az miért igazolja, hogy helyes? Ezt a megjegyzésedet nem értem.

Link to comment
Share on other sites

Kovács Dávid ( Davs )

$nev=$postnev

$email=postemail

$jelszo=jelszo

#Ezek nem így vannak, az összes szabályosan van postolva

$query=mysql_query("select * from tabla where nev='$nev' AND email='$email' AND jelszo='$jelszo') ;

if(mysql_num_rows($query)="1"){

print "helyes" ;

}

 

Tehát ha az általa beírt adatok mind egy sorban vannak, akkor gondolom övé a mail cím, és tényleg õ akar lejelentkezni.

Link to comment
Share on other sites

arpsoft

A feltételeket logikai operátorokkal kell összekapcsolni, azaz:

... WHERE (feltétel1 AND feltétel2) OR feltétel3

Ez kiszûri azokat a rekordokat, ahol VAGY EGYSZERRE teljesül a feltétel1 ÉS a feltétel2, VAGY a feltétel3 teljesül, VAGY mindkettõ egyszerre.

Link to comment
Share on other sites

google

Karakterkódolási probléma: A szerveren fent levõ MYSQL-ben a bekerülõ szövegek ékezetei helyett ?-ek jelennek meg. Mi a probléma? A weboldalon ISO-8859-2 a karakterkészlet, a phpMyAdminban Hungarian kódolást adtam meg.

 

Még egy ehhez kapcsolódó: milyen kódolásban érdemes szövegfájlba menteni az adatbázist? Legutóbb ISO-8859-2-ben próbáltam, de az õ betûbõl o~ lett, és így tovább. :(

Link to comment
Share on other sites

Mezofi

Az én adatbázisomban a cellát latin2_hungarian-nal adom meg. Én is a lapon a ISO-8859-2-t használom. Nálam az adatbázisban az õ betû & # 3 3 7 ; ként jelenik meg. De mikor vissza íródik a képernyõre semmi baja, újra õ betû. :D

Link to comment
Share on other sites

google

Karakterkódolás megoldva! Nem értem miért, de nekem UTF-8 generalban jó teljesen.

Link to comment
Share on other sites

Kovács Gyula (MiniDisk)
:hmm: ez tényleg érdekes. Pedig más esetben pont ott nem szokott jó lenni. De a lényeg, hogy hibátlanul megy. ;)
Link to comment
Share on other sites

  • 3 weeks later...
google

Van egy táblám, amiben van sok rekord. :)

Mindegyikhez tartozik egy kategória, sokhoz ugyanaz. Én ezeket a kategóriákat szeretném összegyûjteni és kiíratni de úgy, hogy mindegyik csak egyszer szerepeljen.

Link to comment
Share on other sites

Mezofi

DISTINCT

mysql_query("SELECT DISTINCT(oszlop név) FROM tábla név");

:)

Link to comment
Share on other sites

google

Há, tényleg! :D

Csak átfutottam néhány ilyen utasítást, és ez pont nem volt köztük. :upsz:

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...