Avatar billede kgp43 Nybegynder
04. november 2003 - 17:35 Der er 21 kommentarer og
2 løsninger

Mellemrum ved udtag af data

Hejsa,

Jeg har en database men noget input. Lad os bare sige at jeg har følgende:

id | brand | info | price

Jeg laver så en forespørgsel til databasen, og får den til at smide rækkerne ud. Jeg kunne godt tænke mig at den lavede et mellemrum mellem de forskellige brands (producenter) ... ala dette:

Producent1
- produkt1
- produkt2
- produkt3

Producent2
- produkt1
- produkt2
- produkt3

osv..
Avatar billede detox Nybegynder
04. november 2003 - 17:43 #1
Jeg vil foreslå du laver flere udtræk. Et hvor du henter brand og derefter et, for hver brand og lister produkterne.
Avatar billede ohmish Nybegynder
04. november 2003 - 17:45 #2
prøv at vise hvordan tabellen i databasen ser ud
Avatar billede sone Nybegynder
04. november 2003 - 17:47 #3
Lav en 'ORDER BY brand' i din SQL
I PHP laver du noget a'la:
$lastBrand = '';
// løkken - for, while...
  if ($lastBrand!=$brand)
  {
    echo '<BR>';
    echo $brand.'<BR>';
    $lastBrand = $brand;
  }

...kan selvfølgelig laves om mht. layout (hvis du bruger en TABLE)
Avatar billede detox Nybegynder
04. november 2003 - 17:50 #4
Jeg vil foreslå noget i den her stil:

<?
require ('connect.inc.php');
$str = "";
$sql = "SELECT id, brand FROM tabel ORDER BY brand";
$kat_res = mysql_query($sql) or die(mysql_error());
while ($kat_row = mysql_fetch_array($kat_res)) {
    $str .= "<b style='color:#039'>".$kat_row['brand']."</b><br />";
    $sql = "SELECT info FROM tabel WHERE id = ".$kat_row['id']." ORDER BY info";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($res)) {
        $str .= "- ".$row['info']."<br />";
    }
}
echo $str;
?>
Avatar billede kgp43 Nybegynder
04. november 2003 - 18:05 #5
ohmish; der er 10-12 forskellige kolonner, men det burde være ligegyldigt da det skulle kunne lade sig gøre om der så kun var to (id og brand).

Detox; jeg må tilstå at jeg ikke forstår hvad du mener, og scriptet er alt for indviklet til mig uden en lille forklaring.
Avatar billede detox Nybegynder
04. november 2003 - 18:08 #6
Ok, prøv det her. Du skal bytte: require 'connect.inc.php'; ud med din egen databaseforbindelse. Spørg, hvis du er i tvivl om noget.

<?
require ('connect.inc.php');// Forbindelse til din database
$str = "";
$sql = "SELECT id, brand FROM tabel ORDER BY brand";
$kat_res = mysql_query($sql) or die(mysql_error());
while ($kat_row = mysql_fetch_array($kat_res)) {
    $str .= "<b style='color:#039'>".$kat_row['brand']."</b><br />";
    $sql = "SELECT info FROM tabel WHERE id = ".$kat_row['id']." ORDER BY info";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_array($res)) {
        $str .= $row['info']."<br />";
    }
    $str .= "<br />";
}
?>
<table>
<tr><td>
<fieldset>
      <p style="color:blue;"><b>Overskrift:</b>
      <br /><?=$str?></p>
</fieldset>
</td></tr>
</table>
Avatar billede detox Nybegynder
04. november 2003 - 18:09 #7
og så skal du naturligvis ændre 'tabel' til din tabels navn i de to forespørgsler.
Avatar billede detox Nybegynder
04. november 2003 - 18:23 #8
Lige et par ændringer:

<?
require ('connect.inc.php');// Forbindelse til din database
$str = "";
$sql = "SELECT brand FROM tabel ORDER BY brand";
$kat_res = mysql_query($sql) or die(mysql_error());
while ($kat_row = mysql_fetch_assoc($kat_res)) {
    $str .= "<b style='color:#039'>".$kat_row['brand']."</b><br />";
    $sql = "SELECT info FROM tabel WHERE brand = '".$kat_row['brand']."' ORDER BY info";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_assoc($res)) {
        $str .= "- ".$row['info']."<br />";
    }
    $str .= "<br />";
}
?>
<table>
<tr><td>
<fieldset>
      <p style="color:blue;"><b>Overskrift:</b>
      <br /><?=$str?></p>
</fieldset>
</td></tr>
</table>
Avatar billede detox Nybegynder
04. november 2003 - 18:29 #9
Hmm, måske du bare skal bruge sones forslag. Mit eksempel er beregnet på at oplysningene liger i to tabeller.
Avatar billede detox Nybegynder
04. november 2003 - 18:31 #10
Ellers skal der være en GROUP BY. Sådan her:

<?
require ('connect.inc.php');// Forbindelse til din database
$str = "";
$sql = "SELECT brand FROM tabel GROUP BY brand ORDER BY brand";
$kat_res = mysql_query($sql) or die(mysql_error());
while ($kat_row = mysql_fetch_assoc($kat_res)) {
    $str .= "<b style='color:#039'>".$kat_row['brand']."</b><br />";
    $sql = "SELECT info FROM tabel WHERE brand = '".$kat_row['brand']."' ORDER BY info";
    $res = mysql_query($sql) or die(mysql_error());
    while ($row = mysql_fetch_assoc($res)) {
        $str .= "- ".$row['info']."<br />";
    }
    $str .= "<br />";
}
?>
<table>
<tr><td>
<fieldset>
      <p style="color:blue;"><b>Overskrift:</b>
      <br /><?=$str?></p>
</fieldset>
</td></tr>
</table>
Avatar billede kgp43 Nybegynder
04. november 2003 - 18:36 #11
Hvordan virker GROUP BY ?
Avatar billede detox Nybegynder
04. november 2003 - 18:38 #12
GROUP BY grupperer, i det her tilfælde brand. Så der kun kommer en af hver med.
Avatar billede sone Nybegynder
05. november 2003 - 09:20 #13
detox >> men kgp43 skal jo have mere end ét produkt med ud per Producent
Avatar billede detox Nybegynder
05. november 2003 - 10:58 #14
sone -> Jo, men som jeg forstår spørgsmålet, står der: "forskellige brands (producenter) ..." og jeg går så ud fra at 'info' er produkterne.
Avatar billede detox Nybegynder
05. november 2003 - 11:20 #15
Jeg vil til gengæld ikke mene mit forslag er brugbart til en større tabel. Der vil jeg derimod foreslå en normalisering af databasen. Altså producenter og produkter i hver sin tabel, for at undgå redundans.
Avatar billede kgp43 Nybegynder
05. november 2003 - 17:39 #16
Hvis jeg nu deler producenter og varer op i hver deres tabel, hvordan vil en søgning på alle produkter så se ud (query) ? og hvad vil fordelen være frem for sone's forslag?
Avatar billede detox Nybegynder
06. november 2003 - 00:47 #17
Fordelen vil først og fremmest være, at du undgår de samme data står mange gange i den samme tabel. Du ville så skulle have et 'producent-id' istedet, som er lig med id i producent tabellen. Det vil jo gøre at du fx kunne hive alle producenterne ud i fx alfabetisk rækkefølge og derefter diverse tilhørende produkter ligeså. Det vil spare plads, gøre dine udtræk hurtigere og mere flexible.
Avatar billede detox Nybegynder
06. november 2003 - 00:48 #18
Når det er sagt, ville du jo stadig kunne bruge sone's metode til at opstille dine data med.
Avatar billede kgp43 Nybegynder
06. november 2003 - 08:40 #19
Jeg vil lige gøre et forsøg senere på ugen.
Jeg har ikke glemt denne tråd, men skal lige have lidt tid til at tænke over tingene.

Er det muligt at give point til flere på een gang?
Avatar billede detox Nybegynder
06. november 2003 - 10:09 #20
Du vender bare tilbage, det haster jo ikke. Ja, du kan fordele point imellem dem der har lagt svar, som du har lyst.
Avatar billede kgp43 Nybegynder
06. november 2003 - 10:19 #21
okay,

du må nok hellere lave et svar så ;)
Avatar billede detox Nybegynder
06. november 2003 - 10:32 #22
Ok, jeg troede bare ikke vi var færdige her.
Avatar billede kgp43 Nybegynder
06. november 2003 - 10:55 #23
Det er vi nok heller ikke. Hvis det virker, når jeg får det prøvet denne weekend, så kan jeg jo lige så godt acceptere svarene :)
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