Jump to content
php.lv forumi

SQL left join pēdējo ierakstu


sandis_m

Recommended Posts

 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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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