Jump to content
GSForum - Segélyvonal

SQL kérdésem van


google

Recommended Posts

arpsoft

Szerintem igen.

Link to comment
Share on other sites

KGigi

Ha lesz egy kis időm, megpróbálom. Köszönöm!

Link to comment
Share on other sites

  • 2 weeks later...
payskin

Van egy tábla, van benne 3 fontos mező...

 

Felejtsétek el. Agyilag a zoknik szintjén tartózkodom... kár, hogy épp határidő van...

Link to comment
Share on other sites

  • 1 month later...
Kiskalóz

Kéne egy kis segítség.. van 1 táblám benne 3 oszlop

 

nev = varchar(255)

datum = date

szam = bigint (32)

 

Indítok 1 lekérdezést dátum szerint de nem igazán jo. Kiirattam az SQL parancsot és ezt kaptam:

SELECT * FROM tabla WHERE datum > 2011-07-04

 

Ekkor a tábla teljes tartalmát kiirja (igen a 2011-07-04 elõttieket is) pedig az adatbázisban is így vannak tárolva a dátumok.

Mit rontok el?

 

 

Link to comment
Share on other sites

Pjotr

SELECT * FROM tabla WHERE datum > '2011-07-04'

Mert egyébként 2000-hez viszonyít szerintem. :hmm:

Link to comment
Share on other sites

Kiskalóz

ojeee..

 

El tudnád magyarázni ez miért van?? (csakhogy meg is értsem :) )

 

Mellesleg lenne megint egy kérdésem ezzel kapcsolatban.

 

Egy névhez egy nap több bejegyzés is születhet, eltérõ értékekkel.

Namármost azt tudom hogy a név szerint a gropu by-al tudom csoportosítani. Azt meg tudom-e oldani valahogy egyszerûbben hogy egy lekérdezésben nevenként adja össze a szam oszlop értékét az adott idõszakon belül.

Jelenleg én ezt 2 lekérdezéssel oldom meg

1. lekérdezem a neveket az adott idõszakon belül.. while ciklussal kiíratom.. és a cikluson belül futtatok ismét 1 sql-t ahol összeadom a szam értékét a feltételeknek megfelelõen.

 

Link to comment
Share on other sites

Pjotr

Az SQL a dátumokat (DATE, DATETIME) szövegként képes fogadni. A te kódodban nem szöveget adtál neki, hanem egy matematikai műveletet, amit elvégzett, majd megnézte az eredményhez viszonyítva a dátumokat.

 

Prepared statement-ek esetében is a dátumok mindig 's', vagyis string típusúak. (Lehet még integer, float és blob az adat típusa egyébként.)

 

---

 

Ha GROUP BY-olsz, akkor használhatod a SUM függvényt.

Link to comment
Share on other sites

Kiskalóz

Értem!

 

Köszönöm!

Link to comment
Share on other sites

  • 2 weeks later...
[OP]Destroy-man

Csak egy gyors elméleti kérdés:

Fotógallériát SQL-ben (binárisan képként eltárolva), vagy a meghajtóra elmentve, sql-be bejegyezve az elérhetőségével célszerű eltárolni? Dinamikussan fejlődő, egyre több képet tartalmazó képhalmazról lenne szó. Itt most arra gondolok, hogy melyik teljesítmény kimélőbb módszer. Viszonylag erős vas lesz alatta (2db 2magos Xeon proci 3,06 GHz-es órajellel, 8 GB ram). Az adatbázist egy MSSQL 2008 R2 hajtja.

 

Mégvalami: a képeket a felhasználók töltik fel az oldalra.

Link to comment
Share on other sites

arpsoft

Én mindenképpen a fájlrendszerben történõ tárolást választanám.

Link to comment
Share on other sites

[OP]Destroy-man

Köszönöm. Akkor ezek szerint az SQL-es megoldás sokkal jobban terhelné az adatbázist. Vagy csak a gyorsan hízás lenne a problémája? Mondjuk az sem nyerõ.

Akkor marad a fájlrendszeres megoldás.

Link to comment
Share on other sites

Pjotr

Ezt a vasat megenné reggelire az SQL szerver nagy forgalom mellett, az a baj. És ekkor még nem említettem, mi történne, ha a képek SQL-ben lennének.

Link to comment
Share on other sites

arpsoft

Nekem nem eszi meg. Kb hasonló felállás. Eddig nem sikerült 50%-nál jobban leterhelnem, pedig néha küldöm rendesen.

Link to comment
Share on other sites

[OP]Destroy-man

MSSQL-ben hogy tudok kettő vagy több mezőnek identitást adni? Jelenleg ezzel szenvedek, mertha bekapcsolom a második mezőn, akkor leveszi az elsőről. :S

 

Van 3 táblám, példa képen leegyszerüsítve:

Főtábla

-ID (elsődleges kulcs)

-Adat

-Tábla1_ID (másodlagos kulcs)

-Tábla2_ID (másodlagos kulcs)

 

Tábla1

-ID (elsődleges kulcs)

-Főtábla_ID

-Adatok

 

Tábla2

-ID (elsődleges kulcs)

-Főtábla_ID

-Adatok

 

A probléma, hogy a főtáblában 3 identitást is kéne használnom. Egyet az ID-re, egyet a Tábla1_ID-re, és egyet a Tábla2_ID-re. Most csak az elsőnek van identitása, de így nem jó, mert ütközés van a másik kettőn. Ugye duplikálás nem lehetséges. A táblák között működő kapcsolat van.

Linq-to-SQL-el kommunikálok a weblap és az SQL között.

A hibaüzenet a következő:

System.Data.SqlClient.SqlException (0x80131904): Cannot insert explicit value for identity column in table 'Főtábla' when IDENTITY_INSERT is set to OFF.

Hogyan lehetne megoldani ezt a csekély problémát?

 

Természetessen a működő SQL táblában nem használok ékezetes betüket. :)

Link to comment
Share on other sites

arpsoft

Az Identity mezõkbe nem lehet direktbe beleírni, hacsak nem engedélyezed ezt a funkciót: "SET IDENTITY_INSERT ON".

Ezen kívül egy táblában csak egy ID mezõ lehet, nem is kell több.

Azt sem értem, miért kéne programból beleírni értékeket, amikor mindegyik identity típusú, a szerver maga intézi ezeket a dolgokat.

Vagy az a gondod, hogy amikor létrehozod a fõtábla rekordját, akkor még nincsenek meg a többi táblában az adatok?

Akkor meg célszerû lenne egy tárolt eljárással beküldeni az adatokat.

Szóval, kicsit konkrétabban le tudnád írni a problémádat? :)

 

Na, kicsit jobban ránéztam azokra a táblákra. Minek kell a Tábla1_ID, amikor a fõtábla ID már benne van? Ez már egyedivé teszi a rekordot.

Link to comment
Share on other sites

[OP]Destroy-man

Végülis átgondolva tényleg elég az 1 ID. :) Akkor probléma megoldva. :)

Link to comment
Share on other sites

  • 4 weeks later...
Dani991

Ti hogyan oldanátok meg egy weboldal menürendszerének az adatbázisban való tárolását? A menürendszer úgy néz ki, hogy több területen helyezkedik el (pl. fejléc alatt vízszintesen, weboldal bal és jobb szélén, stb.), és mindegyik terület kap egy azonosítót, így a sablonkezelõ a késõbbiekben mindent a helyére tesz. Minden ilyen területen belül el lehet helyezni felsorolásos menüket (egyszerû lista linkekkel), illetve dobozokat, amelyekben szöveget vagy akár képet is el lehet helyezni. Azt szeretném megoldani, hogy mindezt egyetlen lekérdezéssel el lehessen érni, a többit majd a PHP szétválogatja.

 

A jelenlegi elképzelésem így néz ki:

menuk tábla:

id    cim    terulet    tipus
1    Lista1    1    lista
2    Doboz1    1    doboz
3    Lista2    2    lista

menu_lista tábla:

id    menu_id    szoveg    url
1    1    link1    http://
2    1    link2    http://
3    1    link3    http://
4    3    link1    http://

menu_doboz tábla:

id    menu_id    torzs
1    2    Tetszõleges szöveg...

 

Az elsõ és a második táblát még ki tudom csikarni egy lekérdezéssel, de ha a dobozos menü tábla is beszáll a buliba, akkor már gondban vagyok. Meg lehet egyáltalán oldani egyetlen lekérdezéssel (esetleg a táblák átrendezésével), vagy mindenképpen több lekérdezésre lesz szükség?

Link to comment
Share on other sites

payskin
:huh: Rajzold le, hogy vannak ezek a menük, dobozok, linkek az oldalban...
Link to comment
Share on other sites

kléni

A SELECT mögé berakod az ugyan olyan nevû mezõk átnevezését ( pl menu_lista.id AS menu_lista_id), így nem lesz gubanc.

Link to comment
Share on other sites

Dani991

Írtam gyorsan egy vázlatos szemléltetõ példát HTML-ben: kép link.

 

A különbözõ menü területeket pirossal bekereteztem, az azokon belül lévõ menüket pedig kékkel. A fejléc alatti területen látszólag másképpen helyezkedik el a menü, de ugyan úgy tárolódik az adatbázisban, mint a többi, csak értelemszerûen erre a területre csak ez az egy lista fért ki, a címét pedig nem jelenítem meg.

 

Így a késõbbiekben az admin felületen bármelyik menüt bármelyik területre lehet pakolni.

 

A lekérdezés így néz ki:

SELECT t1.cim, t1.terulet, t1.tipus, t2.menu_id, t2.szoveg, t2.url
FROM menuk AS t1 LEFT JOIN menu_lista AS t2 ON t1.id = t2.menu_id
ORDER BY t1.terulet ASC;

 

Ez így jó is lenne, csak éppen nincsen benne a menu_doboz tábla. A problémám pedig az, hogy nem tudom, megoldható-e egyáltalán egy lekérdezéssel az egész, és ha igen, akkor jól vannak-e így kialakítva a táblák, vagy esetleg hatékonyabban is fel lehet ezt építeni?

Link to comment
Share on other sites

arpsoft

SELECT t1.cim, t1.terulet, t1.tipus, t2.menu_id, t2.szoveg, t2.url
FROM menuk AS t1 LEFT JOIN menu_lista AS t2 ON t1.id = t2.menu_id
UNION ALL
SELECT t1.cim, t1.terulet, t1.tipus, t3.menu_id, t3.torzs, '' as url
FROM menuk AS t1 LEFT JOIN menu_doboz AS t3 ON t1.id = t3.menu_id
ORDER BY t1.terulet ASC;

A PHP meg szétválogatja, mikor melyik mezõket szabad használni.

Link to comment
Share on other sites

Dani991

Köszi, ez így már jó lesz. :istenvagy:

Link to comment
Share on other sites

  • 9 months later...
[OP]Destroy-man

Access-ben szeretnék egy rekordot átmásolni egy másik táblába, de érvényességi szabályok megsértésére hivatkozva ezt nem teszi meg. Az érdekesség az, hogy nincs is beállítva érvényességi szabályzat, tehát így nehéz lenne azt megszegni.

Az eredeti tábla neve szall_t, a másolaté pedig archiv. Az utóbbi táblát sima struktúra másolással hoztam létre, tehát 1:1 a két tábla. Az archív táblához majd szeretnék hozzáadni a date típusú mezőt, ami a létrejöttét tárolná, de ezen kívül mást nem fog kapni.

Az általam próbált SQL kód:

INSERT INTO archiv SELECT * FROM szall_t WHERE (((szall_t.[azonosító])=[@id]));

Mi okozhat ilyen jellegű hibát?

Link to comment
Share on other sites

KGigi

Mi van, ha kiírod az oszlopok nevét? Mi a pontos hibaüzenet?

Link to comment
Share on other sites

arpsoft

Valószínûleg van egy autoincrement ID mezõd a táblákban. Azt nem tudja beszúrni.

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