Gå til innhold

Hjelp til å hente ut en spesifikk del av av en tabell?


Anbefalte innlegg

Hei!

 

 

Først, beklager dårlig emnetittel - hvis noen har noen bedre forslag så si ifra, da denne var helt på jordet i forhold til hva vi vil fram til (tror jeg) :)

 

Skal prøve å forklare meg kort, men dette er iallfall hva vi trenger hjelp til:

 

 

tabell med alle airways og punkter: airac (i første omgang så er vi bare interessert i å hente ut airway og intersection - det andre burde vi få ut om vi klarer å hente ut punktene ellers :))

Eks på oppsett i 'airac': (her er bare punkter fra 'airway' UP615)

airway number intersection lon       lat
UP615  001    UTH          63.722789 9.577781 
UP615  002    KVB          63.118133 7.810539 
UP615  003    TONDI        62.000000 8.707781 
UP615  004    OSVIG        61.074450 9.398975 
UP615  005    ATLAP        60.146094 9.800695 
UP615  006    TOR          59.169111 10.259267 
UP615  007    ARTOR        58.334420 10.148983 
UP615  008    ALASA        54.808611 9.961667 
UP615  009    TUGDU        54.652778 9.910834 
UP615  010    EKERN        54.505833 9.863889 
UP615  011    LBE          53.654203 9.595067 
UP615  012    XERES        42.023892 -10.06797 
UP615  013    ASMAR        39.372628 -11.59545 
UP615  014    VABEM        36.549108 -13.32278 
UP615  015    BIMBO        31.421450 -16.03287

 

tabell med ruter: phpvms_schedules

route

 

Route kan da f. eks se slik ut:

TOR UP615 ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380 M852 ALASA UM852 EKERN/N0447F370 UM852 POVEL UZ16 GALMA T703 LEKMI T105 VAMAS

 

 

 

Det vi trenger hjelp med er å hente først og fremst TOR fra 'airac'. Og så må vi finne alle punktene på UP615 imellom TOR og ARTOR (UP615 finner man da i 'airway' i 'airac'), til slutt ARTOR. I dette tilfellet så finnes disse punktene på UP615 i databasen: UTH KVB TONDI OSVIG ATLAP TOR ARTOR ALASA TUGDU EKERN LBE XERES ASMAR VABEM BIMBO, så her er det egentlig ingen punkter imellom.

 

Deretter blir det ARTOR, og så alle punktene på P615 mellom ARTOR og ALS (her må vi også ha hjelp til å 'fjerne' /N0451F370 fra bak AAL slik at den vil finne AAL også - gjelder alle andre punkter med /N0xxxFxxx bak også selvfølgelig). Mellom ARTOR og ALS, finnes disse punktene på airwayen: ARTOR AAL RADIS LUTUS ABINO RIDSI ASBIL ALS, pluss en del ekstra både før og etter, som vi helst ikke vil ha med

 

Og slik fortsetter det nedover..

 

 

Vi har INGEN anelese om hvordan vi skal gjøre dette, og håper derfor noen her har noen kloke svar :)

Trenger dere mer info så får dere bare si ifra så skal vel det la seg ordne..

 

 

Takker for all hjelp!!

 

 

Anders

Lenke til kommentar
Videoannonse
Annonse

det du spør om er vel egentlig ikke PHP-relatert, men SQL-relatert, da det virker veldig som løsningen kan gjøres med 1 spørring. Men forklaringen din er litt forvirrende og sliter litt med å se for meg databasen. Man du sette opp en enkel tabell-oversikt og forklare hva de ulike feltene er? Og hvilke som er av interesse?

 

En enkel oversikt noe lignende: Cc966490.sql7_big(l=en-us).gif

  • Liker 1
Lenke til kommentar

Det vi trenger hjelp med er å hente først og fremst TOR fra 'airac'. Og så må vi finne alle punktene på UP615 imellom TOR og ARTOR (UP615 finner man da i 'airway' i 'airac'), til slutt ARTOR. I dette tilfellet så finnes disse punktene på UP615 i databasen: UTH KVB TONDI OSVIG ATLAP TOR ARTOR ALASA TUGDU EKERN LBE XERES ASMAR VABEM BIMBO, så her er det egentlig ingen punkter imellom.

 

Hmm, kanskje du kan bruke raden "number" til å hente ut radene mellom to punkter . Det vil fungere så lenge alt først og fremst har blitt lagt inn i riktig rekkefølge fra før.

Hvis du skal gjøre alt det i en spørring må du mest sansynlig til med objekter og joins, noe som ikke er så lett for nybegynnere :p

 

Hadde kanskje vært bedre og splittet opp å gjort ting steg for steg.

 

Spørring -> behandle med php -> ny spørring -> behandle med php -> resultat

Lenke til kommentar

Hallo!

 

 

Takker for svar, og til å begynne med så tror jeg også at noe slikt Thomas skriver burde gjøres (altså spørring->behandle->ny spørring->behandle->resultat), MEN det går nok ikke å bruke raden number - tror jeg - da det kan gå begge veier. Altså at man bruker AAL P615 ARTOR og ARTOR P615 AAL, hvis dere skjønner.

 

Så det jeg tenker da, er at man må klare å skille vanlige punkter (de uten tall i ruta) og airways (de med tall).

Slik at du begynner med TOR og henter ut koordinatene på det, og så ser scriptet at det er en airway (UP615) som fortsetter ned til ARTOR, som da vil printe ut alle de punktene imellom TOR og ARTOR. Etter det blir det det samme med ARTOR P615 ALS (er stort sett de samme punktene på de 'airwayen' med og uten U foran, men er noen flere på noen enn andre), og så videre nedover i ruta.

 

 

Beklager om det fremdeles er dårlig forklart, men jeg er generelt dårlig i det dessverre :/

 

 

Her er forøvrig oppsettet på tabellene:

 

CREATE TABLE IF NOT EXISTS `airac` (
 `airway` varchar(10) collate utf8_unicode_ci NOT NULL,
 `number` varchar(20) collate utf8_unicode_ci NOT NULL,
 `intersection` varchar(20) collate utf8_unicode_ci NOT NULL,
 `lon` varchar(10) collate utf8_unicode_ci NOT NULL,
 `lat` varchar(10) collate utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

Den andre tabellen hvor route ligger har egentlig ikke så mye å si, da det bare er 'route' som skal printes fra 'phpvms_schedules'.

 

 

 

Håper dette kan være til hjelp for at dere får hjulpet oss! :)

 

 

 

 

Anders

Lenke til kommentar

Ja, stemmer. Intersection, lon og lat skal hentes ut og printes ut, slik at det kommer inn i en URL.

 

ja, skal gi deg et eksempel, men kan bruke en annen airway som eksempel, bare for og faktisk ha noen punkter å printe ut :)

 

'route' fra phpvms_schedules:

TOR UP615 ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380 M852 ALASA UM852 EKERN/N0447F370 UM852 POVEL UZ16 GALMA T703 LEKMI T105 VAMAS

 

 

Så kan bruke P615 fra ARTOR, via AAL til ALS da.

ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380

(ikke tenk på det bak skråstrekene nå - må på en eller annen måte fjerne de, men ikke så farlig om man ikke får til det andre alikevel. Så bare lat som de ikke er der :))

 

Alle punkter ifra 'airac' som er på P615:

P615 001 UTH   63.722789 9.577781
P615 002 BERET 63.342222 8.449450
P615 003 KVB   63.118133 7.810539
P615 004 INLAS 62.651322 8.193931
P615 005 APSAP 62.350000 8.434614
P615 006 TONDI 62.000000 8.707781
P615 007 OSVIG 61.074450 9.398975
P615 008 ATLAP 60.146094 9.800695
P615 009 TOR   59.169111 10.259267
P615 010 ARTOR 58.334420 10.148983
P615 011 AAL   57.103719 9.995578
P615 012 RADIS 56.541667 9.995000
P615 013 LUTUS 56.100833 9.994445
P615 014 ABINO 55.968334 9.994445
P615 015 RIDSI 55.591667 9.994167
P615 016 ASBIL 55.371945 9.993889
P615 017 ALS   54.905414 9.993378
P615 018 ALASA 54.808611 9.961667
P615 019 EKERN 54.505833 9.863889
P615 020 RENSU 54.243611 9.780000
P615 021 LBE   53.654203 9.595067

 

 

Så i dette eksempelet, så burde scriptet kunne printe ut disse punktene:

ARTOR 58.334420 10.148983
AAL   57.103719 9.995578
RADIS 56.541667 9.995000
LUTUS 56.100833 9.994445
ABINO 55.968334 9.994445
RIDSI 55.591667 9.994167
ASBIL 55.371945 9.993889
ALS   54.905414 9.993378

 

 

 

Edit:

Jeg vet ikke, men det jeg tenker er jo på en eller annen måte printe ut dette med en while muligens. Iallfall så skal vært punkt bli skrevet ut på denne måten:

&lat=57.103719&long=9.995578&name=AAL&c=1

osv, men bare jeg på en eller annen måte får henta ut de riktige punktene så går vel det bra :)

(ser også at jeg har bomma litt på navn i tabellen kontra det i urlen, men igjen så har det ingen praktisk betydning..)

 

 

 

Håper virkelig dette gir mening, for det hadde vært utrolig kult og fått dette til!

Vi har et script liggende, men den klarer ikke hente ut alle punktene, pluss at tabellen med punkter og airways på den er utdatert, og nyeste oppdateringa er fra tidlig 2010 eller noe slikt og det har vært mye forandringer på disse airwayene og punktene. (Og dessverre så finner jeg ikke scriptet i systemet vi bruker, phpvms, så får ikke brukt det som hjelp til å lage et nytt, evt skifte ut tabell og slikt på det)

 

 

 

 

Tusen hjertelig takk for all hjelp foreløpig!

 

 

 

Anders

Endret av AndySM
Lenke til kommentar

Om jeg forstår deg rett har du 2 tabeller, og du skal finne noe som er i begge tabellene. Dette høres ut som en enkel spørring. Men jeg sliter helt med å forstå hva det er du egentlig skal ha ut, slik at jeg kan utforme spørringen.

 

Det er denne route jeg ikke helt får til å koble inn.

TOR UP615 ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380 M852 ALASA UM852 EKERN/N0447F370 UM852 POVEL UZ16 GALMA T703 LEKMI T105 VAMAS

 

Er dette en entry i route?

Er dette flere entry?

Hvor går skillet, med hvert mellomrom?

 

Altså, jeg forstår ikke helt hva du mener med følgende:

'route' fra phpvms_schedules:

TOR UP615 ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380 M852 ALASA UM852 EKERN/N0447F370 UM852 POVEL UZ16 GALMA T703 LEKMI T105 VAMAS

 

 

Så kan bruke P615 fra ARTOR, via AAL til ALS da.

ARTOR/N0447F380 P615 AAL/N0451F370 P615 ALS/N0444F380

Endret av etse
Lenke til kommentar

Så i dette eksempelet, så burde scriptet kunne printe ut disse punktene:

ARTOR 58.334420 10.148983
AAL   57.103719 9.995578
RADIS 56.541667 9.995000
LUTUS 56.100833 9.994445
ABINO 55.968334 9.994445
RIDSI 55.591667 9.994167
ASBIL 55.371945 9.993889
ALS   54.905414 9.993378

 

Du må jo nesten ha noe som sier hvor den skal starte og slutte å søke. Har du det?

 

En måte du kunne gjort det på da er noe slikt:

Lagre alt i en array, finne indekser og hente ut ønskede verdier.

 

<?php

mysql_connect('localhost', 'root', '');
mysql_select_db('test');

$start = 'AAL';
$slutt = 'ABINO';
$i = 0;

$sql = mysql_query('SELECT * FROM tabell');

while($row = mysql_fetch_array($sql)) {
$array[$i] = $row['tekst'];
$i++;
}

$s1 = array_search($start, $array);
$s2 = array_search($slutt, $array);

for($y = $s1; $y <= $s2; $y++) 
$arrayf[$y] = $array[$y];

// Hentet ut rader fra AAL til ABINO
var_dump($arrayf);

?>

 

--
-- Tabellstruktur for tabell `tabell`
--

CREATE TABLE IF NOT EXISTS `tabell` (
 `tekst` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Dataark for tabell `tabell`
--

INSERT INTO `tabell` (`tekst`) VALUES
('ARTOR'),
('AAL'),
('RADIS'),
('LUTUS'),
('ABINO'),
('RIDSI'),
('ASBIL'),
('ALS');

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...