ugrás a tartalomhoz

tömb rendezése saját sorrend szerint

tiku I tikaszvince · 2005. Ápr. 15. (P), 15.45
Sziasztok!
MySQL-ből szedek ki adatokat egy tömbbe (szerzok), aminek minden tagja tömb (egy_szerzo). Az egy_szerzo-k szerzok tömben elfoglalt sorrendjét szeretném megváltoztatni, két értékük alapján.
egyszerűbb ha megmutatom:
Array (
  [0] => Array (
           [szerzo_azon] => 32
           [nev] => Magyarics Tamás
           [szul_dat] =>
           [halal_dat] =>
           [funkcio] => ford.
           [egyeb] =>
        )

  [1] => Array (
           [szerzo_azon] => 31
           [nev] => Sproule, Anna
           [szul_dat] =>
           [halal_dat] =>
           [funkcio] => szerz.
           [egyeb] =>
        )
)

Az a lényeg, hogy a szerzok-ben elméletileg akármennyi szerzo lehet
Azt szeretném elérni, hogy a szerz. tualjdonságú szerzők előre kerüljenek, utánnuk jöjjenek a szerk., ford., illusztr.
Az egyes funkciókat betöltő személyek viszont a nevük szerint abc sorrendben.
Végig futottam a manual példáin, de ha jól láttam, akkor csak 1 szempont szerint rendeznek. Szóljatok ha tévednék.
Ha valakinek van egy elegáns megoldása szivesen venném a segtséget.

TikuVoltam
 
1

én erre

toxin · 2005. Ápr. 15. (P), 16.12
storno :(

ui: és a 4 sql query(... WHERE funkcio = szerz. szerk., ford., illusztr) és azon belül abc-sorrendbe rendezve (ORDER BY nev), a tömböket összeadva, az nagyon gáz?
3

ez eléggé

tiku I tikaszvince · 2005. Ápr. 15. (P), 20.04
Az a helyzet, hogy van egy kapcsoló táblám, amivel a szerzőket kötöm a könyvekhez. Először lekérdezem a könyvet, annak az azonosítójával kérdezem le a személyeket. Ebben a kapcsolótáblában van az hogy az egyes szerzők milyen funkciót töltött be a mű létrejöttében (szerző, fordító, stb.). Azért itt van, mert egy ember akár lehet szerző és fordító is (gondolj csak Arany Jánosra)...

Viszont az usort() -ot megnézem, bár most valahogy nem nagyon vagyok gondolkozásra képes.
5

ej lehet hogy megbánom hogy

toxin · 2005. Ápr. 15. (P), 23.50
ej lehet hogy megbánom hogy éjfél körül ezt elpostolom, nembaj majd holnap éghet a pofám :) szóval elvileg az adatbázisod valahogy így nézki (ERD-je)
http://toxin.webes.hu/simple/Downloads/labor/export.jpg és a funkció-kba ebben a sorrendbe rakod be a söröket (ill. a rekordokat) "1-szerzők előre kerüljenek, utánnuk jöjjenek a 2-szerk., 3-ford., 4-illusztr."

akkor valami ilyen lekérdezéssel kezedben a kivánt tömb,

SELECT  szerzõ.szerzo_id,
        szerzõ.név,
        szerzõ.születésnap,
        funkció.funckió_neve,
        szerzõ.egyéb
FROM mûvek
INNER JOIN könyvek ON (mûvek.könyv_id=könyvek.könyv_id)
INNER JOIN szerzõ ON (mûvek.szerzõ_id=szerzõ.szerzõ_id)
INNER JOIN funkció ON (mûvek.funkció_id=funkció.funkció_id)
WHERE (könyvek.könyv_id=XXX)
ORDER BY funckció.funkció_id,szerzõ.név


márha könyvekre kérdezel le egyébként a WHERE-ben nyilván más van. Na majd holnap reggel megint megnézem, addig nem ér röhögni :-)))
6

köszi az ötletet

tiku I tikaszvince · 2005. Ápr. 16. (Szo), 07.17
valójában, jelenleg így nézett ki az adatbázis. Igaz hogy ez már nem PHP kérdés, de adtál egy ötletet:
Külön táblába raktam a funkciót. így még lekezelni is könnyebb lesz.
köszi az ötletet. A módosítás után meg ilyen
"hogy ez miért nem nekem jutott eszembe?"
7

és mi az funckcio:integer a

toxin · 2005. Ápr. 16. (Szo), 10.01
és mi az funkcio:integer a szerző_könyv_kapcsoló - ban ?
8

az már az új változat

tiku I tikaszvince · 2005. Ápr. 16. (Szo), 10.24
az már az új változatban integer. Ha megnézed a régi változatot abban még funkcio:text.
Igaziból így néz ki a kapcsoló tábla:
  • konyv_azon
  • szerzo_azon
  • funkcio

A DBDesigner4 rakja bele a képbe az idegen kulcsokat is. Ezzel engem is megkavart már párszor
9

engem te kavartál meg, mert

toxin · 2005. Ápr. 16. (Szo), 10.34
értettem én alapból is, engem te kavartál meg, mert ha belerakja a DBDesigner4 is, akkor te minek még1szer ??? :)
10

a sorrend

tiku I tikaszvince · 2005. Ápr. 16. (Szo), 10.47
Nem direkt volt ^^
Először létre szoktam hozni a táblákat a szükséges mezőkkel (lásd az előbbi három), és csak utánna hozom létre a kapcsolatokat. Valahogy úgy müxik a dolog, mint Acces-ben, kattint egyik tábla mező, utána kattint a másik tábla mezőjén ahova kapcsolódni fog. Csak accessben át kell húzni az egyik mezőt a másik táblába.
11

az okés, én is így

toxin · 2005. Ápr. 16. (Szo), 11.06
az okés, én is így csinálom, csak mikor az egyedelőfordulásokat hozom létre az idegen kulcsokat nem rakom bele, mert azt ugye utánna megcsinálja a case progi automatice :))
2

usort

zsepi · 2005. Ápr. 15. (P), 16.46
usort pont erre lett kitalálva
4

elméletileg

tiku I tikaszvince · 2005. Ápr. 15. (P), 20.33
Na akkor gondoljuk végig, mert ma már képtelen leszek megcsinálni, viszont van egy öttletem, és kiváncsi lennék a véleményetekre. Szóval:
toXin kézenfekvő ötletéből merítkezve, név szerint rendezve kérem le az adatokat. Eddig nincs problema.
Ha jól értettem, akkor az usort() előtt kell létrehozni egy függvényt, ami megmondja az usortnak, hogy két érték közül melyik a nagyobb. Namost, mivel a felállított sorrendre nem tudok rendszert találni (jelentésbeni különbség van), az az ötletem, hogy abban a bizonyos függvényben az egyes értékekhez rendelek egy számértéket (szerz.=0, ford.=1, stb,stb.) és ezt hasonlítom össze.
Ezzel csak egy bajom van:
Megjegyzés: Ha két elem egyenlő, sorrendjük a rendezett tömbben nem definiált. A 4.0.6-os verzióig a felhasználói függvény ezen elemek eredeti sorrendjét meg tudta őrizni. A PHP 4.1.0-ban bevezetett új rendezőalgoritmus erre már nem nyújt lehetőséget, mivel nincs rá hatékony módszer.

Ezt hogy lehet kiküszöbölni? Vagy félreértettem a manualt?