Мога ли да използвам една MySQL заявка, за да избера отделни редове и след това неразличими редове, ако лимитът не е достигнат?

Надявам се, че обяснявам това правилно, познанията ми за MySQL са доста ограничени.

Да приемем, че имам таблица с редове, които имат поле, наречено форма.

Бих искал да избера куп редове от таблица, но първо да върна всички редове с уникални стойности на полето shape. Ако имам по-малко от определен брой редове, да кажем 7, тогава бих искал да запълня останалите редове с резултати с редове с неуникална форма. Най-добрият начин, по който мога да го изразя, е, че те са "подредени по уникалност и след това по някаква друга стойност".

И така, не искам: квадрат, квадрат, кръг, кръг, правоъгълник. силна>,квадратна,триъгълна

Искам да имам: квадрат, кръг, правоъгълник, триъгълник, квадрат >,квадрат,кръг

Възможно ли е това да се направи с помощта на една SQL заявка? Използвам MySQL с PHP, ако това има значение.

Благодаря!


person Matt Rix    schedule 01.06.2010    source източник
comment
Полето за име уникално ли е? Ако не, имате ли ПК на масата си?   -  person hgulyan    schedule 01.06.2010
comment
Току-що редактирах въпроса, за да премахна препратката към полето за име, тъй като така или иначе никога не съм го използвал в примера, добра уловка :) В истинска таблица щях да имам pk и всичко това, но просто исках да стигна до месото на въпроса и махнете всички останали неща.   -  person Matt Rix    schedule 01.06.2010


Отговори (3)


Можете първо да изберете ограничен брой редове от комбинацията на отделните стойности, в обединение с вашата неуникална заявка (която също ограничавате от максималния брой редове, който искате да извлечете).

т.е. изберете поле1, поле2, ... от (изберете отделно поле1, поле2, ... от ... UNION изберете поле1, поле2, ... от ... LIMIT MAX_ROW_COUNT) AS общо LIMIT MAX_ROW_COUNT

person wimvds    schedule 01.06.2010

Може да успеете да направите това с помощта на UNION (т.е. използвайте две различни заявки, но просто комбинирайте резултатите)

person Mitch Dempsey    schedule 01.06.2010

Можете да използвате UNION ALL, за да обедините 2 различни (но същите избрани) заявки. Но не мисля, че LIMIT работи върху UNION, тогава ще трябва да:

SELECT уникална заявка тук, с ограничение 0,7 UNION ALL SELECT друга заявка тук, с ограничение 0,7

Докато и двете имат еднакви стойности на SELECT, те се обединяват в 1 резултат, след което можете просто да отрежете всички редове след 7.

Но може би вече можете да направите ЛИМИТ върху целия СЪЮЗ, това не знам.

person Rik De Peuter    schedule 01.06.2010