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

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

Пробав со ваква процедура, но резултати не добивам. Малку и сум збунет околку ова:
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

Некој некоја идеја или каде да најадам помош или како да барам по интернет и сл. :)
 
Имаше едно клучно зборче, LIMIT. Баш сега не ми текнува како се користеше, ама за една недела ќе ти кажам за сигурно :) треба да полагам бази на податоци така да...
 
LIMIT има само во MySQL. Сите топ 5 сакаш да ги извадиш со една сторирана процедура и без влезен параметар, на пример да не кажуваш која категорија? Сакаш одеднаш излез за сите?
 
Нема логика пошто не можеш да направиш AND и да ставиш толку бројки.
Пр. Одбери се од Артикли каде што катИД е 1 <И> катИД е 2 ... не може катИД да е и 1 и 2. пробај истото со ИЛИ.
Ама така ќе добиеш само 5 заеднички, само категориите ти се различни (ако си мислел на тоа, ок). Само не ми е јасно зошто би ти требало така. Ваљда си се збунил, можда ти требаат 4-те категории со различни топ 5 артикли од нивна категорија.
Во тој случај треба да направиш поинаку.
 
CREATE PROCEDURE dbo.Top5AllCat
AS
SELECT TOP (5)
FROM Articles
WHERE (id_cat > 0 AND id_cat <5)
ORDER BY id_articles DESC
RETURN
 
...можда ти требаат 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
 
CTE не е ништо посебно, туку View (не баш класично вју де). :) Значи го полниш view-тo и после земаш податоци од него. Наместо цте стави си твој назив.
 
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​
 
Барав на „Барај“ ама не сте имале тема посебна за SQL каде шо може да се поставуваат прашања за SQL, само раштркани теми...

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

CLICK:



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

my.php
 
INSERT INTO RA (honorar, pisatel)
WHERE pisatel > = 1977
VALUES (Honorar * 23/100)

Вака нешто можи?
 
Немам тестирано али еве за првиот и вториот проблем другите малце покасно ќе ти ги ставам се брзам сега

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
 
Тенјкс...ај ќе те почекам за другите!

Фала ти уше еднаш! :zver:
 
На 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

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

Kajgana Shop

Back
На врв Bottom