Avatar billede argmhz Nybegynder
05. juni 2007 - 11:06 Der er 9 kommentarer

Hjælp! prøver at undgå at hive ud for hver række!

Hej
jeg sidder med en opgaver hvor jeg skal hive data ud for hver række ! men jeg vil helst undgå at lave en select for hver af dem

jeg har kigget en del på group_concat og den virker også fint....Men..jeg kan ikke sætte en limit på den !
har prøvet group_concat_max_len men den sætter længten af strengen!!


mvh M

håber i kan hjælpe
Avatar billede 0xffff Nybegynder
05. juni 2007 - 11:15 #1
Skal bruge lidt flere oplysninger for at hjælpe dig.

Hvilke data er det du skal hive ud for hver række ?
Er det sådan at du har et ID eller lignende og skal lave en select for netop det id ? eller har du kun én query og vil have det ud som en samlet tekststreng ?
Er vi over i noget helt andet hvor du vil have en limit på det antal poster du vil have retur fra en sql sætning ?

Jeg forstår ikke spørgsmålet helt. Og hver af ovenstående ting jeg beskriver dikterer forskellige løsningsmodeller.
Avatar billede argmhz Nybegynder
05. juni 2007 - 11:21 #2
et lille eks.

jeg har en lille telefonbog

Hver af dem der er i den har en række numre ! men højst 3!
Avatar billede argmhz Nybegynder
05. juni 2007 - 11:28 #3
Altså ja jeg da et ID i mine tabeller

jeg ville have det hele i en query og det er ikke personerne men nummerne jeg vil have en limit på
Avatar billede 0xffff Nybegynder
05. juni 2007 - 11:30 #4
Hvordan er tabel opbygning ?

Persontabel
PK ID
Navn
Adresse

Telefonnummer
PK ID
FK persontabelid
telefonnummer

Hvis den f.eks er således så er den query du leder efter noget i stil med:

select persontabel.navn, telefonnummer.telefonnummer from persontabel
inner join telefonnummer on persontabel.id = telefonnummer.persontabelid
where persontabel.navn = ''
limit 0,3;

det er et tænkt eksempel da jeg ikke kender din db opbygning.
Avatar billede argmhz Nybegynder
05. juni 2007 - 11:35 #5
tabel opsætningen er nogenlune det samme
men der er ikke personerne jeg vil have en limit på og det ville jeg få her!

Hver person skal kun ha vist max 3 telefonnumre også selv om de har flere
Avatar billede 0xffff Nybegynder
05. juni 2007 - 11:41 #6
en person har vel kun ét navn. Så where sætningen skulle håndtere det ?

Den query ville give et output i stil med:

Per Hansen, 45123456
Per Hansen, 45987654
Per Hansen, 65652232

Med max 3 numre pga. limit 0,3. Navnet Per Hansen vil blive gentaget dog. pga. join.
Avatar billede argmhz Nybegynder
05. juni 2007 - 11:55 #7
det skal være såden her:

Per Hansen, 45123456,45987654,6565223
karen jensen 45123456,45987654,6565223

der er også nogle af posterne det måske kun har 1 eller 2 numre og nogle har måske ingen!
med inner er det kun dem der har et eller flere numre der bliver vist!
alle skal vises !!!

hvis man laver en inner join med en limit så bliver det poster i alt man sætter limit på

funktionaliteten skal være den samme som GROUP_CONCAT bare med en limit!!!!

jeg kunne nemt lave en select mere for hver af rækkerne men det er det jeg prøver at undgå!!






jeg kan mine joins men jeg er nød til at have en limit på tabellen med numre
Avatar billede 0xffff Nybegynder
05. juni 2007 - 12:05 #8
uhm... det er da bare at lave en outer join istedet for at lave en inner join så, hvis du vil have alle med også selv om de ikke har nogle numre.

Mht. group_concat, det er netop det, den concatenerer strengen. Så funktionalitet du sætter med group_concat_max_len er præcis den du kan opnå med group_concat. Group concat virker ikke i forhold til antal poster du ligger i den, men antallet af karakterer.

Umiddelbart vil jeg så sige, at hvis joins ikke virker for dig. Så er du nødt til enten at håndtere det clientside, eller acceptere et loop med flere selects.
Avatar billede mobildata Nybegynder
08. juni 2007 - 10:25 #9
Hved med at bruge UNION ALL
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester