Gå til innhold

Automatisk søk etter neste ID


Anbefalte innlegg

Jeg har et php -script som genererer et PDF dokument vha. PDFLib. Koden jeg quoter i denne tråden skal i utgangspunktet generere et PDF som inneholder noen angitte kolonner fra en tabell, og sortere dette etter avdelingsnummer.

 

// Denne koden velger neste avdeling etter id "1"

$result = mysql_query("SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker WHERE id > 1 ORDER BY avdeling ASC LIMIT 1");

// Denne skriver data fra definerte kolonner i valgt avdeling

while($row = mysql_fetch_array( $result )) {

pdf_show_xy($pdf, $row['avdeling'], 70, 720);

pdf_show_xy($pdf, $row['navn'], 99, 720);

pdf_show_xy($pdf, $row['adresse'], 235, 720);

pdf_show_xy($pdf, $row['postnummer'], 375, 720);

pdf_show_xy($pdf, $row['poststed'], 405, 720);

pdf_show_xy($pdf, $row['tlf'], 475, 720);

}

//-----------------------------------------------------------------------------

// Denne koden velger neste avdeling etter id "2"

$result = mysql_query("SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker WHERE id > 2 ORDER BY avdeling ASC LIMIT 1");

// Denne skriver data fra definerte kolonner i valgt avdeling

while($row = mysql_fetch_array( $result )) {

pdf_show_xy($pdf, $row['avdeling'], 70, 705);

pdf_show_xy($pdf, $row['butikknavn'], 99, 705);

pdf_show_xy($pdf, $row['adresse'], 235, 705);

pdf_show_xy($pdf, $row['postnummer'], 375, 705);

pdf_show_xy($pdf, $row['poststed'], 405, 705);

pdf_show_xy($pdf, $row['tlf_butikk'], 475, 705);

}

 

Det som er problemet her, er at denne søker etter neste ID, og dersom jeg f.eks. oppretter og sletter en post, så vil det være en ID som ikke inneholder data. Så la oss si at vi tar avdeling 1-5 som eksempel, hvor avdeling 1 har ID1, avd 2 har ID2, avd 3 har ID4, avd 4 har ID5.

 

Dersom jeg da bruker koden ovenfor, så vil den printe avdeling 3 to ganger, fordi den neste ID'en etter 2 er avdeling 3, og den neste etter ID 3 er også avdeling 3. Skjønner dere problemet?

Dersom det er "hull" i IDene så vil det ødelegge slik at noen avdelinger vil bli printet flere ganger.

Jeg tenkte på å bruke "WHERE avdeling > 2 ORDER BY avdeling ASC LIMIT 1");", men da vil jeg få det samme problemet dersom det det ikke er noen avdelinger mellom 3 og 5 f.eks.

 

 

Noen som har noen tips til hvordan dette kan løses?

Lenke til kommentar
Videoannonse
Annonse
Hvorfor henter du ikke bare infoen om alle avdelingene i samme select?

 

SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker WHERE id > 1 ORDER BY avdeling ASC

Fordi jeg manuelt er nødt til å sette posisjonen til hver kolonne ettersom dette skal generes som pdf.

 

Eksempel:

pdf_show_xy($pdf, $row['poststed'] = Generer teksten fra en rad i kolonnen poststed.

, 405, 720); = Setter posisjonen til teksten.

Lenke til kommentar

405 og 720 er x og y posisjoner?

 

Du jo bare øke y, dvs 720 med 15 på starten av hver "loop" i while-en.

 

y = 705;
while($row = mysql_fetch_array( $result )) {
y = y + 705;
pdf_show_xy($pdf, $row['avdeling'], 70, y);

 

Dette hører strengt tatt hjemme i php-forumet. Problemet ditt er nok mer PHP enn SQL... ;)

Endret av blackbrrd
Lenke til kommentar

Takk for svar, det stemmer at x og y er posisjoner ja. Når jeg bruker:

SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker WHERE id > 1 ORDER BY avdeling ASC

Så printer den alle avdelingene, som jo er riktig. Jeg forstår hva du mener med å bruke en loop som automatisk plasserer hver linje - men jeg får en feil når jeg bruker denne koden:

y = 705;
while($row = mysql_fetch_array( $result )) {
y = y + 15;
pdf_show_xy($pdf, $row['avdeling'], 70, y);

Parse error: syntax error, unexpected '=' in C:\Wamp\www\database\oversikt.php on line 124

 

Det er mulig at denne burde vært under PHP, men jeg trodde det var SQL kommandoen som måtte endres for å få dette til å fungere - derfor postet jeg den her.

Endret av f00b
Lenke til kommentar

Be en moderator flytte tråden til php forumet hvis du ikke finner ut av php-kodingen som mangler.

 

Glemte en ting:

SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker ORDER BY avdeling ASC

 

Ta bort > 1 greia, ellers hopper du over første avdeling...

Lenke til kommentar

Har bedt moderator om å flytte tråden over til PHP nå :)

 

// Henter info fra database
$result = mysql_query("SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker ORDER BY avdeling ASC");

// Definerer Y posisjon til tekst
$y = 735;

// Printer tekst fra $result - Første post
pdf_setfont($pdf, $font2, 8);
while ($row = mysql_fetch_array($result )) {
pdf_show_xy($pdf, $row['avdeling'], 70, 735);
pdf_show_xy($pdf, $row['navn'], 99, 735);
pdf_show_xy($pdf, $row['adresse'], 235, 735);
pdf_show_xy($pdf, $row['postnummer'], 375, 735);
pdf_show_xy($pdf, $row['poststed'], 405, 735);
pdf_show_xy($pdf, $row['tlf'], 475, 735);
}
// Printer tekst fra $result - Andre post
while ($row = mysql_fetch_array($result )) {
pdf_show_xy($pdf, $row['avdeling'], 70, $y - 15);
pdf_show_xy($pdf, $row['navn'], 99, $y - 15);
pdf_show_xy($pdf, $row['adresse'], 235, $y - 15);
pdf_show_xy($pdf, $row['postnummer'], 375, $y - 15);
pdf_show_xy($pdf, $row['poststed'], 405, $y - 15);
pdf_show_xy($pdf, $row['tlf'], 475, $y - 15);
}

 

Problemet her er at alt (all teksten i alle avdelinger) samles på èn linje, altså linjen med posisjon 735. Jeg er på en eller annen måte nødt til å få definert i while loopen at den skal søke etter neste avdeling som inneholder data, få så å gå videre tror jeg?

Lenke til kommentar

Prøv dette:

// Henter info fra database
$result = mysql_query("SELECT avdeling, navn, adresse, postnummer, poststed, tlf FROM butikker ORDER BY avdeling ASC");

// Definerer Y posisjon til tekst
$y = 735;

// Printer tekst fra $result - Første post
pdf_setfont($pdf, $font2, 8);
while ($row = mysql_fetch_array($result )) {
pdf_show_xy($pdf, $row['avdeling'], 70, $y);
pdf_show_xy($pdf, $row['navn'], 99, $y);
pdf_show_xy($pdf, $row['adresse'], 235, $y);
pdf_show_xy($pdf, $row['postnummer'], 375, $y);
pdf_show_xy($pdf, $row['poststed'], 405, $y);
pdf_show_xy($pdf, $row['tlf'], 475, $y);
$y -= 15;
}

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...