Jump to content
GSForum - Segélyvonal

SQL kérdésem van


google

Recommended Posts

KGigi

Ez is 404.

Link to comment
Share on other sites

Pjotr

Valamilyen nem látható karakter van az URL-ben, kiszedtem notepad++-ba, majd vissza a böngészőbe, és ment.

 

http://kepzelet.com/pictures/2011/0523/9c33646e0f8bd07ff45b2d7730547228/sql.jpg

Link to comment
Share on other sites

KGigi

Ez így is rossz. Valami bug lehet a fórummotorban. Elég vágólapra tenni.

Link to comment
Share on other sites

arpsoft

A tábla szerkezete fixen ez, amit látunk?

Link to comment
Share on other sites

[OP]Destroy-man

Nagyjábol igen, a nevük természetessen nem ez az oszlopoknak, de azzal már elboldugolok. :). Még bővülni fog az idők során "pár" oszloppal (kb. 500 oszlop lesz összesen).

 

De szerintem a kép alapján már érthető a lényeg, hogy mit is szeretnék.

Link to comment
Share on other sites

arpsoft

Az az 500 oszlop kicsit megdöbbentett. Ennél a mennyiségnél sokkal egyszerűbb és praktikusabb egy plusz táblát berakni, ahol az oszlopokból kvázi sorokat csinálsz, valahogy így: adatsor_id, feltétel_id, eredmény, ahol az adatsor_id a jelenlegi sor azonosítód, a feltétel_id mondjuk a mostani oszlop neve, az eredmény meg true vagy false.

Ezt az adathalmazt sokkal könnyebb kezelni, mivel az oszlop nevekből lényegében adatot készítettél.

Arról nem is beszélve, hogy egy esetleges új "oszlop" felvétele is sokkal egyszerűbbé válik, hiszen nem kell szerkezetet módosítanod.

Link to comment
Share on other sites

  • 4 weeks later...
Kiskalóz

Tudna valaki segíteni hogy az alábbi kód miért nem ad vissza semmit?


$sql="insert into ugyfel_kiadas(ugyfel_kiadas_ugyfel_data_id, ugyfel_kiadas_ugyfel_id, ugyfel_kiadas_datum, ugyfel_kiadas_feldolgozva)
            select ugyfel_data.ugyfel_data_id,".$ugyfel_id.",".$time." , 'n' from ugyfel_data left join ugyfel_kiadas on ugyfel_data.ugyfel_data_id=ugyfel_kiadas.ugyfel_kiadas_ugyfel_data_id 
            WHERE substr(ugyfel_data.ugyfel_data_lev_irszam, 0, 3)=".$irszam_korzet." AND ugyfel_kiadas.ugyfel_kiadas_ugyfel_data_id is null limit 10";

 

a substr lehet a hibás mivel substr nélkül simán és jól lefut.

$sql="insert into ugyfel_kiadas(ugyfel_kiadas_ugyfel_data_id, ugyfel_kiadas_ugyfel_id, ugyfel_kiadas_datum, ugyfel_kiadas_feldolgozva)
select ugyfel_data.ugyfel_data_id,".$ugyfel_id.",".$time." , 'n' from ugyfel_data left join ugyfel_kiadas on ugyfel_data.ugyfel_data_id=ugyfel_kiadas.ugyfel_kiadas_ugyfel_data_id 
where ugyfel_kiadas.ugyfel_kiadas_ugyfel_data_id is null AND ugyfel_data.ugyfel_data_lev_irszam=".$ugyfel_irszam."  limit 10";

Link to comment
Share on other sites

KGigi

Az ugyfel_data.ugyfel_data_lev_irszam elsõ három karakterét akarod?

Link to comment
Share on other sites

Kiskalóz

igen

Link to comment
Share on other sites

arpsoft

substr(ugyfel_data.ugyfel_data_lev_irszam, 0, 3)=".$irszam_korzet."

helyett

ugyfel_data.ugyfel_data_lev_irszam LIKE '".$irszam_korzet."_' 

vagy

substr(ugyfel_data.ugyfel_data_lev_irszam, 1, 3)=".$irszam_korzet."

vagy

left(ugyfel_data.ugyfel_data_lev_irszam, 3)=".$irszam_korzet."

Link to comment
Share on other sites

Kiskalóz

Utolsó elötti lett tökéletes. Köszönöm!!

Link to comment
Share on other sites

  • 3 weeks later...
kléni

Van egy táblám:

id pont

1 0

2 10

3 0

4 5

, valamint egy ilyen lekérés:

SELECT * FROM tabla WHERE pont>0 ORDER BY pont DESC, id DESC LIMIT 5

Itt a pontot vizsgálva a 3-as idjû felhasználó pontja van. Élesben érthetõen jóval több sor van több 0 ponttal. Azt szeretném megtudni, hogy visszaadja, a visszakapott sorokból hanyadik a 3-as idjû useré. Erre van lehetõség, php-s while nélkül?

Link to comment
Share on other sites

Pjotr

Mit is szeretnél?

Link to comment
Share on other sites

kléni

Ugye a fenti lekérésben ezt kapom vissza:

2 10

4 5

1 0

3 0

Amit én szeretnék megtudni, az egy 4es szám (azaz 3as), a 3as id-jû sorszáma. Valami olyat, hogy megtudni, ha több ugyan olyan pontú van, akkor kiadja hanyadik közülük.

toplista lenne, elõtte utána 2-2 sort jelenítek meg.

Korábban ilyennel próbálkoztam:

SELECT * FROM tabla WHERE pont>0 ORDER BY pont ASC LIMIT 5

és

SELECT * FROM tabla WHERE pont<=0 ORDER BY pont DESC LIMIT 5

Ez ment is, amíg nem néztem meg több 0 pontos userrel :D Mivel kevés esélyt látok erre, ebbõl az lesz, hogy beírok egy fake adatot, 0 pontnál amúgy se számít hanyadik :D

Link to comment
Share on other sites

payskin

Mondjuk ha 1 számot akarsz megtudni, akkor helybõl nem * kell a SELECT után. A LIMIT pedig tud mûködni

 

LIMIT n,m

felállásban, ahol az n. pozíciótól ad vissza m darab eredményt.

 

De ha úgy akarsz megcsinálni egy toplistát, hogy egynél több lekérdezés van benne, akkor ott valami komoly gubanc van. Én legalábbis furcsán nézek.

 

 

 

Link to comment
Share on other sites

arpsoft

Ha jól értem, az egyes eredményeken belül szeretnéd az eredményt elért felhasználó helyezését meghatározni.

Ilyenkor be kell számozni az egyes rekordokat:

SELECT @i:=@i+1 AS iterator, tabla.* FROM tabla,(SELECT @i:=0) foo

majd egy másik lekérdezéssel megtudjuk az adott csoporton belüli legkiseeb sorszámot:

SELECT min(iterator) as elso from (SELECT @i:=@i+1 AS iterator, tabla.* FROM tabla,(SELECT @i:=0) foo where tabla.pont=$keresett_pontszam) foo2

Az eredmény pedig az első lekérdezéssel létrehozott táblában lévő iterator mező és a második lekérdezésben lévő elso mező különbsége lesz.

 

Ez csak MySQL-ben ilyen bonyolult, mert nincsenek ranking függvényei. :(

Link to comment
Share on other sites

kléni

@Balász: Igen, ezt tudom. Csak azt nem, hogy honnantól kell lekérni. Megszámolni már próbáltam, mennyi van elõtte, de ugye a 0-ás pontúakat nem adja hozzá, viszont az id rendezés miatt nem pont az elején lesz, ami kell nekem.

 

@arpsoft: Egy ilyet kaptam: #1248 - Every derived table must have its own alias Akár hogy próbáltam megoldani a manual segítségével, nem jött össze

Link to comment
Share on other sites

arpsoft

Kitettél minden zárójelet és a foo illetve foo2 elnevezés is benne van?

Link to comment
Share on other sites

  • 4 weeks later...
Kiskalóz

Az alábbi kódban mit írtam el?

Az a cél hogy adott id-val rendelkezõ sorokat NE kérdezze le:

 

Eredeti lekérdezés:

AND f.folyamat_id != (218 OR 145 OR 100 OR 55)

 

Most ezzel van helyettesítve:

AND f.folyamat_id != 218 AND f.folyamat_id != 145 AND f.folyamat_id != 100 AND f.folyamat_id != 55

Link to comment
Share on other sites

arpsoft
AND f.folyamat_id not in (218, 145, 100, 55)

Link to comment
Share on other sites

Kiskalóz

Köszi

 

Az én írásom ezek szerint nagyon nem helyes.. :S

Link to comment
Share on other sites

KGigi

Van valakinek ötlete, hogy hogy lehet ha nem is egész táblát, de legalább tábla sémát másolni MS SQL Compactban? CREATE TABLE ... AS SELECT * FROM ... (Oracle) nincs az SQL Serverben sem, de ott van SELECT * INTO. Itt arra hibát dob. Ahogy nézem a Google találatokat, elég erős a gyanúm, hogy a Compact-ban ilyet egészen egyszerűen nem lehet, de nem akarom elhinni. Pedig fontos lett volna, így most többször annyi melóm lesz...

Link to comment
Share on other sites

KGigi

Jól értelmezem, hogy ezzel lesz INSERT INTO-m?

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...