Autor | Zpráva | ||
---|---|---|---|
vaclav999 Profil |
#1 · Zasláno: 12. 6. 2009, 09:37:09
Zdravím všechny, pomůže mi někdo zformulovat dotaz? Už fakt nevim.
Mám 4 tabulky v první eviduji články, v další galerie obrázků, v další pak jednotlivé obrázky a poslední je propojení článků a galerií. Pro dotaz jsou podstatné tři tedy články, obrázky a propojení.-sloupce zjednodušuji, píšu jen podstatné pro dotaz. 1)články - article id_ar | nazev_ar 1 | nazev1 2 | nazev2 2)obrázky - images id_img | gallery_img | nazev_img 1 | 1 | 112 2 | 1 | 113 3 | 2 | 214 4 | 2 | 215 3)propojení - vazby_ar_ga id_ar_ga | article_ar_ga | gallery_ar_ga 1 | 1 | 2 2 | 2 | 1 Snažím se zformulovat dotaz tak, aby výsledkem byly řádky kde se pro jednotlivé články přiřadí jeden obrázek s nejvyšším názvem(číslem) výsledek by tedy měl být tento: 1 nazev1 215 2 nazev2 113 Amatérsky by to jednoduše šlo udělat v jednom dotazu se zeptat na přidruženou galerii k článku a pak v cyklu se u každého článku zeptat jaké jsou obrázky a vybrat s nejvyšším číslem. Jak to ale napsat do jednoho dotazu? Předem všem díky. |
||
TomášK Profil |
#2 · Zasláno: 12. 6. 2009, 11:21:38 · Upravil/a: TomášK
SELECT nazev_ar, MAX(nazev_img) FROM article JOIN vazby_ar_ga ON article_ar_ga = id_ar JOIN images ON gallery_ar_ga = id_img GROUP BY id_ar |
||
vaclav999 Profil |
#3 · Zasláno: 12. 6. 2009, 11:41:55
Super, to je ono!! Jen je tam malá chybka ne id_img ale gallery_img
SELECT nazev_ar, MAX(nazev_img) FROM article JOIN vazby_ar_ga ON article_ar_ga = id_ar JOIN images ON gallery_ar_ga =gallery_img GROUP BY id_ar Ještě malé rozšíření. Jak by se udělalo, kdybych chtěl přiřadit třeba obrázek ne s největším číslem ale třeba 5 v pořadí od největšího? Každopádně díky moc. |
||
vaclav999 Profil |
#4 · Zasláno: 12. 6. 2009, 11:51:11
A nebo ještě jinak, co kdyby nazev_img nebylo číslo ale řetězec a chtěl bych to napřed nějak seřadit a pak vybrat první záznam? Rád se přiučím.
Předem díky. |
||
TomášK Profil |
#5 · Zasláno: 12. 6. 2009, 12:23:47
Za chybku se omlouvám. Pro vlastní řazení bude potřeba obdoba tohoto dotazu:
SELECT * FROM zamestnanci z WHERE mzda IN (SELECT mzda FROM zamestnanci WHERE z.profese = profese ORDER BY mzda DESC LIMIT 2) který jsem přezval z http://www.root.cz/clanky/korelovane-vnorene-dotazy-nepouzivat-a-nahradit/. Na přiučení výborný článek ;-) |
||
vaclav999 Profil |
#6 · Zasláno: 12. 6. 2009, 12:34:55
Díky, super článek. Snad Vám to budu někdy moct oplatit.
|
||
Kajman_ Profil * |
#7 · Zasláno: 12. 6. 2009, 12:43:52
No, hlavně se v něm dočtete, že je to velice náročné a když budete mít v tabulkách hodně záznamů, bude to šíleně pomalé.
V mysql to jde zrychlit přes uživatelské proměnné http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=89155#10 (Někomu se tu stalo, že to nefungovalo, ale to byl nějaký složitější dotaz, na jednoduché to funguje.) |
||
Časová prodleva: 15 let
|
0