sandis_m Posted July 6, 2011 Report Share Posted July 6, 2011 (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 July 6, 2011 by sand2s Quote Link to comment Share on other sites More sharing options...
daGrevis Posted July 6, 2011 Report Share Posted July 6, 2011 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. Quote Link to comment Share on other sites More sharing options...
reiniger Posted July 7, 2011 Report Share Posted July 7, 2011 (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 July 7, 2011 by reiniger Quote Link to comment Share on other sites More sharing options...
sandis_m Posted July 7, 2011 Author Report Share Posted July 7, 2011 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 Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 7, 2011 Report Share Posted July 7, 2011 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. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 7, 2011 Report Share Posted July 7, 2011 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. Quote Link to comment Share on other sites More sharing options...
sandis_m Posted July 7, 2011 Author Report Share Posted July 7, 2011 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. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 7, 2011 Report Share Posted July 7, 2011 (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 July 7, 2011 by Maris-S Quote Link to comment Share on other sites More sharing options...
sandis_m Posted July 7, 2011 Author Report Share Posted July 7, 2011 Man to visu vajag iekš viena query, jo ir jāizvada vairāki izsoļu rezultāti..utt Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted July 7, 2011 Report Share Posted July 7, 2011 Tu gribi, lai kārtojot pēc id, tev sakārto pēc skaita? Vai nu sola.aid vietā liec COUNT(sola.sid) vai taisi ar subselektiem. Quote Link to comment Share on other sites More sharing options...
Maris-S Posted July 7, 2011 Report Share Posted July 7, 2011 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. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.