Jump to content
php.lv forumi

Recommended Posts

Posted (edited)

 mysql_query(" SELECT `table1`.*,`table2`.*, COUNT(`table2`.sid) AS `skaits`
					 FROM `table1` 
					 LEFT JOIN `table2` ON `table1`.id = `table2`.aid

					 WHERE  `table1`.end < '". time() ."'
					 AND `table1`.id = '$izID'
					 GROUP BY `table1`.id
					 ORDER BY table2.id DESC
					 LIMIT 1
					 ");

 

Iekš table2 ir, piemēram, ieraksti:

 

sid , aid, user, skaitlis

1 | 6 | 1 | 60

2 | 4 | 1 | 54

3 | 6 | 1 | 66

4 | 9 | 1 | 43

 

 

Izvadot "skaitlis" no `aid` 6, viņš man izvada nevis 66, bet 60.

Man vajag dabūt pēdējo ierakstu.

 

Vai tas ORDER BY table2.id DESC neiedarbojas uz left joinu?

Edited by sand2s
Posted

Kas tas par "table2"? Ko Tu vēlies panākt? Iegūt pēdējo ierakstu? Parādi Savu īsto kveriju, īstās tabulas un izstāsti... ko vēlies panākt.

Posted (edited)

DESC LIMIT 1

Ko tad nozīmē šitais koda gabals? Ka tiek kārtots no lielākā uz mazāko un atgriež tikai vienu rezultātu! Tad loģiski ka atgriezīs 66.

Ja tev nepieciešams lai atgriež lietotājam ar mazako skaitli.

ORDER BY table2.skaitlis ASC LIMIT 1

Edited by reiniger
Posted

DESC LIMIT 1

Ko tad nozīmē šitais koda gabals? Ka tiek kārtots no lielākā uz mazāko un atgriež tikai vienu rezultātu! Tad loģiski ka atgriezīs 66.

Ja tev nepieciešams lai atgriež lietotājam ar mazako skaitli.

ORDER BY table2.skaitlis ASC LIMIT 1

 

Nē, man nevajag mazāko, bet gan pēdējo ierakstu, kur aid ir 6.

Viņš man izvada 60, kaut gan man vajag 66

Posted

Tas ko Tu gribi panākt nav vienkārši izdarāms. Order by nelīdzēs, jo kārtošana nenotiek atsevišķi tikai joinotajam rezultātam. Vienīgais ko Tev varu ieteikt daudz nedomājot ir izmantot divus vaicājumus, pirmajā dabū otrās tabulas vajadzīgo id, pēdējam ierakstam pieļauju ka būs lielākais id, tātad max(id) un tad ar otro vaicājumu dabū visu ierakstu pēc noteiktā id. Vienā vaicājumā, iespējams, to arī varēs panākt, bet būtu jāizmanto kādas viltīgas metodes, ja ir ļoti liela vēlēšanās veikt tādu uzdevumu, tad vari mēģināt ar string apvienošanas lietām to izdarīt (concat). Iesākumam vari paskatīties šo tēmu, tur skaties tieši pēdējo vaicājumu, kaut kas līdzīgs tiek darīts, no šī vaicājuma vari mēģināt ideju izmantot, bet īpaši nesalīdzināju vai uzdevumi ir līdzīgi, tāpēc neapgalvoju ka šī metode derēs.

Posted

Pag, a kā Tu nosaki ka tieši tas ieraksts ir pēdējais? Viņam tak ir mazākais id. Parasti, ja tiek izmantots autoincrement, tad pēdējam ierakstam ir tieši lielākais id.

Posted

Ir tabula `auctions`:

 

id, name, description, start, end

 

Un tabula `sola`, kur ir visas likmes:

 

sid , aid (auction ID), user, likme

 

SELECT `auction`.*, `sola`.*, COUNT(sola.sid) as `skaits`
					 FROM `auction`
					 LEFT JOIN `sola` ON `sola`.aid = `auction`.id


					 WHERE  `auction`.end < '". time() ."'


					 GROUP BY `auction`.id 
					 ORDER BY `sola`.aid  DESC

 

Man vajag, lai uzrāda pēdējo likmi, kas būtu bijis 66, bet man uzrāda pirmo.

Posted (edited)

Nepievērsu uzmanību Tavējiem rezultātiem pirmajā tabulā, tur ir dažādi aid, to palaidu garām. Kā jau domāju pēdējo ierakstu var noteikt pēc lielākā id. Principā visu jau aprakstīju kā to panākt, ar diviem vaicājumiem tas izdarāms. Sākumā atrodi lielāko id un pēc viņa dabū visu ierakstu.

Edited by Maris-S
Posted

Nu ar diviem vaicājumiem var sataisīt, bet nav optimāli, jo būs cikliski daudz vaicājumu izpildīt, ja gribi vienā, tad viens no variantiem būtu šāds:

 

select
auctions.*,
(select user_id from sola where auction_id = auctions.id order by id desc limit 1) as user_id
from
auctions

 

Tabulu un kolonu nosaukumus tad saliec kādi Tev ir, arī protams pārbaudi visu.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...