Avatar billede buch78 Novice
19. november 2003 - 11:35 Der er 35 kommentarer og
1 løsning

Hjælp til kode.. udtræk fra mysql og til side.

Hejsa jeg har et problem med at lave et udtræk fra et par tabeler , jeg har prøvet at tegne hvordan jeg kunne tænkte mig det.. http://buch78.friserverplads.dk/saadan/saadan.JPG

Mit store problem er at jeg ved ikke hvor meget der står i mine tabeler... Håber på et forslag
Avatar billede buch78 Novice
19. november 2003 - 11:43 #1
Håber at der er nogle der forstår mit spørgsmål
Avatar billede bigo Nybegynder
19. november 2003 - 11:44 #2
SELECT * FROM tabel1, tabel2 WHERE tabel2.id = tabel1.id;
Avatar billede bigo Nybegynder
19. november 2003 - 11:48 #3
det kunne være en stor hjælp med et db udtræk af tabeller / recordnavne på de to tabeller for at være sikker i det man laver ..
Avatar billede detox Nybegynder
19. november 2003 - 11:57 #4
Ja, det er gætteri. For mig ser det ud som om du ønsker:

SELECT a.id, b.tal FROM tabel1 a, tabel2 b WHERE b.tal LIKE concat(a.id,'%') ORDER  BY a.id
Avatar billede buch78 Novice
19. november 2003 - 12:19 #5
ok.. det jeg har er 2 tabeler. i den ene står der job [Job_type](fx. Bar 1 , Bar 2 , Bar 3) og i den anden har jeg [job](ID, jobs, navn)
Det der gerne skulle komme ud er
(!! Bar 1 og jobs er det samme !!)
Fx.
bar 1
ID, Navn 
ID, Navn

ba2 2
ID, navn
ID, navn

osv
Avatar billede buch78 Novice
19. november 2003 - 12:20 #6
der skulle selvfølig stå bar 2 istedet for ba2 2
Avatar billede buch78 Novice
19. november 2003 - 12:36 #7
jeg har også lavet en fejl i (!! Bar 1 og jobs er det samme !!)

det der menes med det er at inde i [jobtype] ligger der job og i den ligger bar 1, bar 2. og i [job] ligger jobs. og i job & jobs..ligger det samme.
Avatar billede detox Nybegynder
20. november 2003 - 00:57 #8
Hmm, det er stadig noget forvirrende. Hvad der står i tabellerne og hvad du vil have ud. Kunne du måske lave en dump af dine tabeller med et par rækker data; i den her stil:

CREATE TABLE test (
  id smallint(5) unsigned NOT NULL auto_increment,
  profil varchar(255) character set latin1 NOT NULL default '',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

#
# Data dump for tabellen `test`
#

INSERT INTO test VALUES (1, '610 123 1654');
INSERT INTO test VALUES (2, '610 4123 654');
Avatar billede buch78 Novice
20. november 2003 - 20:22 #9
sådan..

CREATE TABLE `job_type`
(
  `id` tinyint(3) unsigned default '0',
  `Job` char(33) default '0'
)
TYPE=MyISAM;

INSERT INTO `job_type` (`id`, `Job`) VALUES("1", "Bar 1");
INSERT INTO `job_type` (`id`, `Job`) VALUES("2", "Bar 2");

CREATE TABLE `job`
(
  `ID` tinyint(3) unsigned default '0',
  `Job` varchar(200) default '0',
  `Navn` varchar(90) default '0'
)
TYPE=MyISAM;

INSERT INTO `tabel1` (`ID`, `Job`, `Navn`) VALUES("1", "Bar 1", "jens");
INSERT INTO `tabel1` (`ID`, `Job`, `Navn`) VALUES("2", "Bar 2", "børge");
INSERT INTO `tabel1` (`ID`, `Job`, `Navn`) VALUES("3", "Bar 2", "brian");
INSERT INTO `tabel1` (`ID`, `Job`, `Navn`) VALUES("4", "Bar 1", "brian");

Til en oplysning har jeg ændret det billede jeg linker til.....
Avatar billede buch78 Novice
20. november 2003 - 20:34 #10
Grunden til at jeg ikke kan nøjes med et udtræk fra table job er at jeg også skal have udskrevet dem som der ikke er nogle forbindelse imellem
Avatar billede detox Nybegynder
21. november 2003 - 01:50 #11
Jeg tror jeg har forstået meningen. Det nemmeste bliver nok at lave flere forespørgsler, medmindre din database er travlt optaget. Fx sådan her:

<?
require 'db.php';// Forbindelse til database
$out = "";
$res = mysql_query("select Job from job_type order by Job") or die(mysql_error());
while ($row = mysql_fetch_row($res)) {
    $out .= $row[0]."<br /><br />";
    $res2 = mysql_query("select ID, Navn from job where Job='".$row[0]."'") or die(mysql_error());
    while ($row2 = mysql_fetch_assoc($res2)) {
        $out .= $row2['ID'].", ".$row2['Navn']."<br />";
    }
    $out .= "----------<br />";
}
echo $out;// Spyt ud
?>
Avatar billede detox Nybegynder
21. november 2003 - 01:51 #12
Forøvrigt skal du lige lægge mærke til at du kalder din sidste tabel for 'job', men i INSERT linierne bruger du 'tabel1'.
Avatar billede buch78 Novice
23. november 2003 - 10:48 #13
Jeg vil starte med at sige tak. for den tid du har lagt i det her.

Det virker faktisk meget godt.. spørgsmålet er om man kunne lave det endnu mere enkelt...  jeg syntes ikke helt jeg kan over skue hvad der sker..

jeg skal nemmelig også have hevet en ting mere ud.. i tabelen job er der et ID. Den ID har jeg også i en tabel som hedder basic. og fra basic skal jeg have en adresse ud fra hver person..

Hvis man skal forklare hvad der sker i koden.

Så først
forbinder til DB
Laver en variabel ($out)
lave en variabel og skriver det hele ud ( køre i en løkke)
skriver data felt 0 ud
Avatar billede detox Nybegynder
24. november 2003 - 02:28 #14
Jeg tror ikke det kan laves så meget enklere, spørgsmålet er hvor store dine tabeller er og hvor 'travl' din database er. For i givet fald skulle du nok overveje en løsning, hvor man trækker alle oplysninger ud med nogle få forespørgsler og sorterer dem i php. Hvis det derimod ikke er noget problem ville jeg holde mig til denne metode.
Mht at hente adressen fra en tredie tabel, kan du ændre den anden forespørgsel i den her stil (navnene skal du lige rette til så de passer med dine):

<?
require 'db.php';// Forbindelse til database
$out = "";
$res = mysql_query("select Job from job_type order by Job") or die(mysql_error());
while ($row = mysql_fetch_row($res)) {
    $out .= $row[0]."<br /><br />";
    $res2 = mysql_query("select a.ID, a.Navn, b.adresse from job a left join basic b on a.ID=b.jobID where Job='".$row[0]."'") or die(mysql_error());
    while ($row2 = mysql_fetch_assoc($res2)) {
        $out .= $row2['ID'].", ".$row2['Navn'].", ";
        $out .= $row2['adresse']."<br />";
    }
    $out .= "----------<br />";
}
echo $out;// Spyt ud
?>
Avatar billede buch78 Novice
27. november 2003 - 01:34 #15
Hej igen.. bare for at være meget bøvlet kunne jeg godt tænke mig at få det sat ind i tabeler.. jeg har klippet noget ind så du kan se hvad jeg mener..

$out = "";
$res = mysql_query("select JOB from job_type order by JOB") or die(mysql_error());
while ($row = mysql_fetch_row($res)) {
    $out .= $row[0]."<br /><br />";
    $res2 = mysql_query("select t1.Ident, t1.Fornavn,t1.Efternavn,t1.Adresse,t1.Postnr,t3.City,t1.Telefon,t1.andet,t2.Job_før,t2.Job_efter from basis as t1 , deltagelse as t2 , postnr as t3 where t1.Ident=t2.Ident and t1.postnr=t3.postnr and t2.Job_under='".$row[0]."'") or die(mysql_error());
    while ($row2 = mysql_fetch_assoc($res2))
        {
echo "<table>";
while ($row2 = mysql_fetch_array($res2)) {
echo "
<tr><table border=1 width=600 cellspacing=0>
<td width=300>".$row2['Ident']."</td>
<td width=100>".$row2['Fornavn']."</td>
<td width=200>".$row2['Efternavn']."</td>
</tr>";
}
        }
echo "</table>";

men det virker selvfølig ikke.. PS jeg kunne også godt tænke mig at få sat den første ind i en tabel..
Avatar billede detox Nybegynder
27. november 2003 - 01:46 #16
Du har: while ($row2 = mysql_fetch_assoc($res2)) to gange efter hinanden. Og prøv at erstatte echo med: $out .= ,så samler du alt outputtet og echo'er det til sidst. I den her stil:

<?
$out = "";
$res = mysql_query("select JOB from job_type order by JOB") or die(mysql_error());
while ($row = mysql_fetch_row($res)) {
    $out .= $row[0]."<br /><br />";
    $res2 = mysql_query("select t1.Ident, t1.Fornavn,t1.Efternavn,t1.Adresse,t1.Postnr,t3.City,t1.Telefon,t1.andet,t2.Job_før,t2.Job_efter from basis as t1 , deltagelse as t2 , postnr as t3 where t1.Ident=t2.Ident and t1.postnr=t3.postnr and t2.Job_under='".$row[0]."'") or die(mysql_error());
    $out .= "<table>";
    while ($row2 = mysql_fetch_array($res2)) {
        $out .= "
        <tr><table border=1 width=600 cellspacing=0>
        <td width=300>".$row2['Ident']."</td>
        <td width=100>".$row2['Fornavn']."</td>
        <td width=200>".$row2['Efternavn']."</td>
        </tr>";
    }
    $out .= "</table>";
}
echo $out;
?>
Avatar billede detox Nybegynder
27. november 2003 - 01:50 #17
Hvor mange 'JOB' regner du med at få i 'job_type'? For det vil resultere i en ekstra forespørgsel for hver 'JOB'. Det kan klares med ialt 2 forespørgsler, hvis vi optimerer det lidt.
Avatar billede buch78 Novice
27. november 2003 - 01:53 #18
jeg tror at jeg har omkring 30 stk i Job_type og der er omkring 1000 der skal ligges ind under job_type
Avatar billede detox Nybegynder
27. november 2003 - 02:05 #19
Så vil jeg foreslå, at du ændrer scriptet til kun at lave to forespørgsler.
Jeg har lavet et eksempel, der illustrerer det og sætter resultatet i en tabel:

<?
require 'db.php';// Forbindelse til database

$res = mysql_query("
    select Job from job_type order by Job
    ") or die(mysql_error());
while ($data = mysql_fetch_row($res)) {
    $jobs[] = $data[0];
}
mysql_free_result($res);

$res = mysql_query("
    select a.ID, a.Navn, a.Job, b.adresse from job a
    left join basic b on a.ID=b.jobID order by a.Job, a.ID
    ") or die(mysql_error());
while ($data = mysql_fetch_assoc($res)) {
    $row[] = $data;
}
mysql_free_result($res);

$out = "";
$i = 0;
$out .= "<table>";
foreach ($jobs as $job) {
    $out .= "<tr><td  colspan='3' style='text-align: center; border: thin groove;'>".$job.":</td></tr>";
    while (isset($row[$i]['Job']) && $job == $row[$i]['Job']) {
        $out .= "<tr><td style='text-align: center; border: thin groove;'>".$row[$i]['ID']."</td>
        <td style='text-align: center; border: thin groove;'>".$row[$i]['Navn']."</td>
        <td style='text-align: center; border: thin groove;'>".$row[$i]['adresse']."</td></tr>";
        $i++;
    }
}
echo $out;
?>
Avatar billede detox Nybegynder
27. november 2003 - 02:07 #20
Som du ser bliver resultatet fra de to forespørgsler lagt i to array's og sammenligningen bliver foretaget bagefter.
Avatar billede detox Nybegynder
27. november 2003 - 02:11 #21
Det andet vil belaste din database uforholdsmæssigt meget. Så medmindre du er solobruger på databasen, vil det ikke holde.
Avatar billede detox Nybegynder
27. november 2003 - 02:40 #22
Her er en lidt mere overskuelig udgave; uden inline styles:


<style type="text/css">
<!--
td {
    text-align: center;
    border: thin solid #006699;
    margin: 5px;
    padding: 2px 4px;
}
-->
</style>
<?
require 'db.php';// Forbindelse til database

$res = mysql_query("
    select Job from job_type order by Job
    ") or die(mysql_error());
while ($data = mysql_fetch_row($res)) {
    $jobs[] = $data[0];
}
mysql_free_result($res);

$res = mysql_query("
    select a.ID, a.Navn, a.Job, b.adresse from job a
    left join basic b on a.ID=b.jobID order by a.Job, a.ID
    ") or die(mysql_error());
while ($data = mysql_fetch_assoc($res)) {
    $row[] = $data;
}
mysql_free_result($res);

$out = "";
$i = 0;
$out .= "<table>";
foreach ($jobs as $job) {
    $out .= "<tr><td colspan='3'>".$job.":</td></tr>";
    while (isset($row[$i]['Job']) && $job == $row[$i]['Job']) {
        $out .= "<tr>
        <td>".$row[$i]['ID']."</td>
        <td>".$row[$i]['Navn']."</td>
        <td>".$row[$i]['adresse']."</td>
        </tr>";
        $i++;
    }
}
unset($jobs, $row);
echo $out;
?>
Avatar billede buch78 Novice
28. november 2003 - 21:34 #23
Hejsa jeg har alså stadigvæk problemer med at få det til at virke.... hvis du vil kan jeg godt sende dig et billede af hvordan jeg gerne skulle have det ud.. hvis du så lige gidder at sende en mail til kim_b78 @ hotmail.com
Avatar billede buch78 Novice
28. november 2003 - 21:57 #24
Jeg fik det til at virke.. dog kunne jeg godt tænkte mig nogle få ændringer.. fx. når den skriver indholdet af JOB ud så kunne jeg godt tænkte mig at jeg får antaldet af personer under jobbet skrevet ud (kan i ikke bruges til dette)

og så har jeg skrevet hvor jeg godt kunne tænke mig at få linje skift ind...

?>
<style type="text/css">
<!--
td {
    text-align: center;
    border: thin solid #006699;
    margin: 5px;
    padding: 2px 4px;
}
-->
</style>
<?

$res = mysql_query("select JOB from job_type order by JOB") or die(mysql_error());
while ($data = mysql_fetch_row($res)) {
    $jobs[] = $data[0];
}
mysql_free_result($res);

$res = mysql_query("select t1.Ident, t1.Fornavn,t1.Efternavn,t1.Adresse,t1.Postnr,t3.City,t1.Telefon,t1.andet,t2.Job_før,t2.Job_efter,t4.JOB from basis as t1 , deltagelse as t2 , postnr as t3 , Job_type as t4 where t1.Ident=t2.Ident and t1.postnr=t3.postnr and t2.Job_under=t4.JOB") or die(mysql_error());
while ($data = mysql_fetch_assoc($res)) {
    $row[] = $data;
}
mysql_free_result($res);

$out = "";
$i = 0;
$out .= "<table>";
foreach ($jobs as $job)
{
    $out .= "<tr><td colspan='3'>".$job.":</td></tr>";
    while (isset($row[$i]['JOB']) && $job == $row[$i]['JOB']) {
        $out .= "<tr>
        <td>".$row[$i]['Ident']."</td>
        <td>".$row[$i]['Fornavn']."</td>
        <td>".$row[$i]['Efternavn']."</td>
            <td>".$row[$i]['Adresse']."</td>
            <td>".$row[$i]['Postnr']."</td>
            <td>".$row[$i]['City']."</td>
            <td>".$row[$i]['Telefon']."</td>
           
            <td>".$row[$i]['andet']."</td>
            <td>".$row[$i]['Job_før']."</td>
            <td>".$row[$i]['Job_efter']."</td>
                // Her vil jeg gerne have linje skift ind
        </tr>";
        $i++;
    }
}
unset($jobs, $row);
echo $out;
?>
Avatar billede detox Nybegynder
30. november 2003 - 23:38 #25
Måske sådan her:


<?

$res = mysql_query("select JOB from job_type order by JOB") or die(mysql_error());
while ($data = mysql_fetch_row($res)) {
    $jobs[] = $data[0];
    $antal[] = mysql_result(mysql_query("select count(*) from deltagelse where Job_under='$data[0]'"),0);
}
mysql_free_result($res);

$res = mysql_query("select t1.Ident, t1.Fornavn,t1.Efternavn,t1.Adresse,t1.Postnr,t3.City,t1.Telefon,t1.andet,t2.Job_før,t2.Job_efter,t4.JOB from basis as t1 , deltagelse as t2 , postnr as t3 , Job_type as t4 where t1.Ident=t2.Ident and t1.postnr=t3.postnr and t2.Job_under=t4.JOB") or die(mysql_error());
while ($data = mysql_fetch_assoc($res)) {
    $row[] = $data;
}
mysql_free_result($res);

$out = "";
$i = 0;
$j = 0;
$out .= "<table>";
foreach ($jobs as $job)
{
    $out .= "<tr><td>".$job.":</td><td>".$antal[$j]."</td></tr>";
    while (isset($row[$i]['JOB']) && $job == $row[$i]['JOB']) {
        $out .= "<tr>
        <td>".$row[$i]['Ident']."</td>
        <td>".$row[$i]['Fornavn']."</td>
        <td>".$row[$i]['Efternavn']."</td>
            <td>".$row[$i]['Adresse']."</td>
            <td>".$row[$i]['Postnr']."</td>
            <td>".$row[$i]['City']."</td>
            <td>".$row[$i]['Telefon']."</td>
            <td>".$row[$i]['andet']."</td>
            <td>".$row[$i]['Job_før']."</td>
            <td>".$row[$i]['Job_efter']."</td>
        </tr>";
        $i++;
    }
    $out .= "<tr><td colspan='3'><br /></td></tr>";
    $j++;
}
unset($jobs, $row);
echo $out;
?>
Avatar billede buch78 Novice
02. december 2003 - 22:14 #26
Så er jeg tilbage igen.. har du lidt tid til at hjælpe mig.. jeg har fundet et billede af hvordan det skal ende med at se ud ???
Avatar billede detox Nybegynder
02. december 2003 - 22:22 #27
Ja?
Avatar billede buch78 Novice
02. december 2003 - 22:23 #28
gidder du ikke lige kontakte mig på mail kim_b78 a hotmail.com så kan jeg lige sende dig et billede af hvordan det gerne skulle ende med at se ud.. jeg er ikke så gald for at ligge det på nettet
Avatar billede detox Nybegynder
02. december 2003 - 22:29 #29
'kim_b78 a hotmail.com' kan da ikke være den rigtige adresse med mellemrum?
Avatar billede detox Nybegynder
02. december 2003 - 22:30 #30
he he...
Avatar billede buch78 Novice
02. december 2003 - 22:31 #31
nej der er mellem rum for at botterene ikke indexcere min mail adr..
kim_b78 @ hotmail.com uden mellemrum
Avatar billede detox Nybegynder
02. december 2003 - 22:32 #32
Ja, har sendt dig en mail.
Avatar billede detox Nybegynder
02. december 2003 - 22:37 #33
Eller mener du MSN?
Avatar billede detox Nybegynder
06. december 2003 - 01:52 #34
Hvordan går det her?
Avatar billede buch78 Novice
06. december 2003 - 02:20 #35
det er vist på tide at lukke.. Tak for hjælpen
Avatar billede detox Nybegynder
06. december 2003 - 02:29 #36
Velbekommen.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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