» »

En enostaven querry v MySQL :(

En enostaven querry v MySQL :(

TheHijacker ::

Grr. Kar ne morem verjet, da mi tako enostavna stvar ne deluje.
Takole je. Imam MySQL bazo v katerem imam zapise s polji ime in kategorija. Vse kar bi rad naredil je da bi izpisal zadnjih 20 zapisov za kategorijo 'neki'. Torej qerry sem si zamislil takole:

select * from $mytable where kategorija like '%neki%'

Kaj naj še dodam, da mi sedaj ne bo izpisal vseh ampak zamo zadnjih 20 iz te tabele, ki jo dobim. Neki v zvezi z limitom, kot sem v manualu prebral, samo ne deluje pravilno.

Hvala.
http://www.google.si

zdravc ::

Sam ne poznam MSSQL-a, vendar SQL kot jezih je standard, na nivoju logike. Sam delam z Oracle-om, zato ti lahko svetujem le teoretično. Limita, ki jo omenjaš verjetno omejuje stevilo zapisov, ki ti jih sql vrne iz celotne množice, ki ustreza pogoju. Problema se lotiš drugače. Če imaš v bazi podatek kot je recimo zaporedna številka, ki pa mora biti ločeno za vsako kategorijo posebej, je rešitev takšna, da poiščeš najprej zaporedno številko, ki je za 10 manjša od maximalne iz te kategorije in nato to uporabiš v tvojem selectu. Do rezultata tako prideš z dvema ločenima selectoma, če pa MSSQL podpira vgnezden select, pa to lahko rešiš z enim selectom.
Druga elegantnejša rešitev je s padajočim sortom po zaporedni številki in limito za 10 izpisov, vendar ti select vrne rezultat v obratnem zaporedju. Upam, da sem ti pomagal z nasvetom.
kdor zna pa žih

cahahopie ::

SELECT noviceText FROM novice ORDER BY id DESC LIMIT 20 ... tole je moj select ukaz za mysql bazo, da mi izbere 20 novic iz baze, ki majo najnovejši (najvišji id), torej po pravilnem vrstnem redu (najnovejša novica na vrhu nad vsemi).

TheHijacker ::

Hja samo jaz nimam polja id ampak samo ime ter kategorija... Kaj pa sedaj?
http://www.google.si

rc-car ::

SELECT * FROM $mytable LIMIT 20
Lahko das pa se kak ORDER BY noter, da ti bo pravilni vrstni red ubral!

Pa naredi si ID, da bos vedel, kateri so zadnji zapisi! Ce imas samo ime kategorije in zapise, pol lahko razvrcas samo po imenu...
Nothings gonna stop me now, I'm breaking the rules, I'm gonna do it if its not allowed

Mr-KONJ ::

OK recmo ce govorimo o SQL bi js na tvojem mestu naredu tko:


Nejprej bi u sql stavku naredu da mi vse recorde pobere v obratnem vrstnem redu se prav ud zadnga proti prvem nekak tko:
strSQL="select bla from bla descending"
ce descending ne dela napis desc, ne vem u cem je sicer razlika sam mene je to enkrat zajebaval.

Zdej pa sam se z loop/for zanko poberes sam prvih 20 recordov:

do until stevec = 20

ker si z sqlom obrnu na glavo recorde ti bo tko zadnih 20 izbral
.............seveda ce sm prou razumu vprasanje.........
He cut off the heads of a hundred and thirty-one lords.It was a bad time for the empire.

TheHijacker ::

g. Konj: tako nekako. Sem pa raje kar popravil zapise v bazi in sicer sem dodal ID. Tako da sej nimam več težav.

Hvala za pomoč.
http://www.google.si

rc-car ::

Pa se vam mesa? z unti/for zanko brat ven zapise?? Pa to lahko traja, heh, kako sekundo >:D

Lepo das noter IDje in das:
SELECT * FROM $mytable ORDER BY id DESC LIMIT 20
Nothings gonna stop me now, I'm breaking the rules, I'm gonna do it if its not allowed

alesrosina ::

no, ce smo natancni, tale ....LIMIT 20 men ne dela. (asp, access db) Zgleda da to deluje samo z PHP/MySQL in tud ce pogledas u ksn manual za sql stavke (pa ne recimo: ASP & SQL al pa PHP with SQL - ampak samo SQL) tega linit ni omenjenga. al sm ga spregledu? Skratka, men ne dela.

zato se problem resi z for zanko ali pa z adovb konstantami.

pozna kdo boljso resitev za asp?

rc-car ::

Za MySQL mas tuki link in to dela povsod. Kako pa je s tem ukazom v SQL na splosno pa nebi vedel. Najbrz, da res ne obstaja..
Nothings gonna stop me now, I'm breaking the rules, I'm gonna do it if its not allowed

vuce ::

Se najbol logicna resitev je tale od mr-KONJ-a!

vuce ::

Aja se neki: tale identifikacijska stevilka (id) je dobr ce je v vsaki bazi k men se je enkrat use sesul k je nism meu!

rc-car ::

id je res dobr met, ampak ne zarad tega, da bi se baza sesula, ampak zato, da potem lazje primerjas vnose, jih sortiras glede na cas vpisa itd..
Nothings gonna stop me now, I'm breaking the rules, I'm gonna do it if its not allowed

ToniT ::


Ne vem če bo delovalo, ampak poskusiš pa lahko tole:

SET ROWCOUNT 20
SELECT * FROM $mytable
ORDER BY id DESC
SET ROWCOUNT 0

Na koncu ne smeš pozabiti dati SET ROWCOUNT 0.

Druga varianta, ki deluje na MS Sql Server 7 in višje pa je:

SELECT TOP 20 * FROM $mytable
ORDER BY id DESC

Tukaj ni problema s tem da bi se omejitev ohranila.

krneki0001 ::

V navadnem SQL-u dela limit čisto brez problemov.
Drugače pa delajte tabele z ID in na koncu probajte še dat TIMESTAMP - pol pa res ne boste mel nobenih problemov. Jst tko delam prvi v vrsti je id zadnji pa timestamp.
LP
Nebivedu


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Malce zahtevnejši SQL stavek včasih narobe SELECT-a

Oddelek: Izdelava spletišč
302037 (1706) Brilko
»

Newbie question ... again

Oddelek: Izdelava spletišč
51018 (907) Jebiveter
»

skripta za članke

Oddelek: Izdelava spletišč
141197 (1019) cahahopie
»

2002-03-29 -> 29.3.2002

Oddelek: Izdelava spletišč
161499 (1325) cahahopie
»

Še malo teženja o php

Oddelek: Programiranje
461683 (1272) rc-car

Več podobnih tem