Помош: SQL и останати бази на податоци

Член од
27 ноември 2005
Мислења
636
Поени од реакции
11
Ми треба помош.
Имам MS SQL база со две табели kategorija и artikli. Вкупниот број на редови во табелата kategorija е 10. Треба да ги извлечам првите 5 артикли од секоја категорија и да ги публикувам. Треба да добијам вакво нешто:

Пробав со ваква процедура, но резултати не добивам. Малку и сум збунет околку ова:
CREATE PROCEDURE dbo.Top5AllCat
AS
SELECT TOP 5 *
FROM Articles
WHERE (id_cat = 1 and id_cat = 2 and id_cat=3 and id_cat=4)
ORDER BY id_articles DESC
RETURN

Некој некоја идеја или каде да најадам помош или како да барам по интернет и сл. :)
 

back_rest

ex mod coder
Член од
19 јули 2006
Мислења
1.590
Поени од реакции
106
Имаше едно клучно зборче, LIMIT. Баш сега не ми текнува како се користеше, ама за една недела ќе ти кажам за сигурно :) треба да полагам бази на податоци така да...
 
Член од
17 февруари 2007
Мислења
296
Поени од реакции
0
LIMIT има само во MySQL. Сите топ 5 сакаш да ги извадиш со една сторирана процедура и без влезен параметар, на пример да не кажуваш која категорија? Сакаш одеднаш излез за сите?
 

cYb3rc0re

~ место за реклама
Член од
3 мај 2005
Мислења
914
Поени од реакции
170
Нема логика пошто не можеш да направиш AND и да ставиш толку бројки.
Пр. Одбери се од Артикли каде што катИД е 1 <И> катИД е 2 ... не може катИД да е и 1 и 2. пробај истото со ИЛИ.
Ама така ќе добиеш само 5 заеднички, само категориите ти се различни (ако си мислел на тоа, ок). Само не ми е јасно зошто би ти требало така. Ваљда си се збунил, можда ти требаат 4-те категории со различни топ 5 артикли од нивна категорија.
Во тој случај треба да направиш поинаку.
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
CREATE PROCEDURE dbo.Top5AllCat
AS
SELECT TOP (5)
FROM Articles
WHERE (id_cat > 0 AND id_cat <5)
ORDER BY id_articles DESC
RETURN
 
Член од
27 ноември 2005
Мислења
636
Поени од реакции
11
...можда ти требаат 4-те категории со различни топ 5 артикли од нивна категорија.
Во тој случај треба да направиш поинаку.
Да, знам но како поинаку...

работел некој вакво нешто, користел CTE:
with cte
as
(
select *, row_number() over(partition by categoryid order by articleid) as rn
from your_table
)
select *
from cte
where rn between 1 and 5
order by CategoryID, ArticleID
 
Член од
17 февруари 2007
Мислења
296
Поени од реакции
0
CTE не е ништо посебно, туку View (не баш класично вју де). :) Значи го полниш view-тo и после земаш податоци од него. Наместо цте стави си твој назив.
 
Член од
27 ноември 2005
Мислења
636
Поени од реакции
11
CREATE PROCEDURE dbo.test
AS
with cte
as
(
select *, row_number() over(partition by categoryid order by articleid) as rn
from article
)
select *
from cte
where rn between 1 and 5
order by CategoryID, ArticleID​
 

GRUNGE

Cobain со цигарче!
Член од
25 февруари 2008
Мислења
677
Поени од реакции
28
Барав на „Барај“ ама не сте имале тема посебна за SQL каде шо може да се поставуваат прашања за SQL, само раштркани теми...

Ок, иам едно прашање шо ако знај некој SQL нека го реши. Брачеда ми полага SQL за некој ден, па ако има некој поголемо искуство во SQL нека напише. Јас баталив со SQL. :tv:

CLICK:



* Фонорар :) е Хонорар :pos2:

 

GRUNGE

Cobain со цигарче!
Член од
25 февруари 2008
Мислења
677
Поени од реакции
28
INSERT INTO RA (honorar, pisatel)
WHERE pisatel > = 1977
VALUES (Honorar * 23/100)

Вака нешто можи?
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
Немам тестирано али еве за првиот и вториот проблем другите малце покасно ќе ти ги ставам се брзам сега

UPDATE RA SET honoroar = honorar + honorar*23/100 WHERE pisatel in (SELECT pisatel FROM pisatel WHERE godina>1977)

SELECT ime, prezime FROM pisatel WHERE pisatel in (SELECT pisatel from RA WHERE honroar=100000050 AND roman in (SELECT roman from Roman WHERE zanr="komedija")) AND godina>45
 

GRUNGE

Cobain со цигарче!
Член од
25 февруари 2008
Мислења
677
Поени од реакции
28
Тенјкс...ај ќе те почекам за другите!

Фала ти уше еднаш! :zver:
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
На 3тата несватив за какво групирање се работи најверојатно подредени по презимиња мислам вака иде:

SELECT Pistatel.ime, Pisatel.prezime, RA.honorar, Roman.naslov, Roman.godina, Roman.zarn FROM Pisatel, RA, Roman WHERE Pisatel.pisatel in (SELECT pisatel FROM RA WHERE honorar > 99990 AND honorar < 999990) AND Roman.pisatel = RA.pisatel AND RA.roman = Roman.roman ORDER BY Pisatel.prezime DESC

И последната (првите две се во претходниот пост)

SELECT Pistatel.ime, Pisatel.prezime, RA.honorar, Roman.naslov, Roman.godina, Roman.zarn FROM Pisatel, RA, Roman WHERE Pisatel.prezime like "%вски" AND Pisatel.drzava="Македонија" OR Pisatel.drzava="Србија" AND Roman.pisatel = RA.pisatel AND RA.roman = Roman.roman

Не се тестирани али мислам се точни, ако не нека ме исправи некој
 

deXterche

тадаммм
Член од
12 февруари 2006
Мислења
4.920
Поени од реакции
941
Ги апдејтав сите, сега се мислам сите точни
 

Kajgana Shop

На врв Bottom