Avatar billede expnet Seniormester
03. februar 2007 - 03:07 Der er 17 kommentarer og
1 løsning

to mysql-tabeller og tre ting søges efter

' ----------- tabeller i mysql ----------
CREATE TABLE `bokse` (
  `id` int(11) NOT NULL auto_increment,
  `toptitle` varchar(255) NOT NULL default '',
  `pos` enum('left','right') NOT NULL default 'left',
  `webplads` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;


CREATE TABLE `nyheder` (
  `id` int(11) NOT NULL auto_increment,
  `omraade` varchar(255) NOT NULL default '',
  `kontakt` varchar(255) NOT NULL default '',
  `kilde` varchar(255) NOT NULL default '',
  `billede` varchar(255) NOT NULL default '',
  `overskrift` varchar(255) NOT NULL default '',
  `topindhold` text NOT NULL,
  `indhold` text NOT NULL,
  `artid` int(11) NOT NULL default '0',
  `dato` varchar(255) NOT NULL default '',
  `vardato` varchar(255) NOT NULL default '',
  `nyhed_var` int(11) NOT NULL default '0',
  `filnavn` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=12 ;
'-----------------------------------------------

<?
#------- html / php kode ----------------------
<?
$hptitle_exp = explode(".",$_SERVER['HTTP_HOST']);
$httplink = $hptitle_exp[1].'.'.$hptitle_exp[2];

$SQL = "SELECT * from bokse where pos = 'right'";
$load_sql = mysql_query($SQL)or die("<font size='2'>".mysql_error()."</font>");
while($box_left = mysql_fetch_object($load_sql)){
?>
   
<table width="160" border="0" cellpadding="0" cellspacing="0">
    <tr>
        <td align="center" class="MenuBaggrund"><?=$box_left->toptitle;?></td>
    </tr>
<?
$SQL_info = mysql_query("SELECT * from nyheder where omraade = '$hptitle_exp[0]' or omraade = 'danmark'");
while($box_info = mysql_fetch_object($SQL_info)){
if($box_info->artid == $box_left->id){
?>
    <tr>
        <td class="MenuIndhold">
   
        <?
        if($box_info->filnavn == ""){
       
        if($box_info->nyhed_var == "1"){
            echo '<a href="http://'.$box_info->omraade.'.'.$httplink.'?page=nyhedread&nid='.$box_info->id.'">'.nl2br($box_info->overskrift).'</a>';
        }elseif($box_info->nyhed_var == "2"){
            echo '<a href="http://'.$box_info->omraade.'.'.$httplink.'?page=nyhedread&nid='.$box_info->id.'">'.nl2br($box_info->overskrift).'</a>';
        }else{
            echo nl2br($box_info->topindhold);
        }
       
        }else{
            echo include($box_info->filnavn);
        }
        ?>
       
        </td>
    </tr>
<?
}
}
?>
    <tr>
        <td height="5"></td>
    </tr>
</table>
<?
}
?>

----------------------------------------------

Det jeg gerne vil havde den skal gøre er at liste alle mine bokse ud men de rigtigt nyheder som passer med "artid" og enden med "omraade" fra subnavnet som jeg finder fra "http_host" og ellers skal den liste den der har fået "omraade" med navnet danmark i felte omraade

håber i forstår mig
Avatar billede esben85 Nybegynder
03. februar 2007 - 13:53 #1
prøv med denne sql-sætning.
Den laver en join på bokse.id og nyheder.artid, og hvis der ikke findes nogle resultater med brugerens input, returnerer den resultater med 'danmark'
'---- sql begin ----
select *
from nyheder,bokse
where nyheder.artid = bokse.id and bokse.pos = 'right'
    and nyheder.omraade =
    if((select count(*) from nyheder,bokse
            where nyheder.artid = bokse.id and bokse.pos = 'right'
            and nyheder.omraade = '$hptitle_exp[0]' > 0),
        '$hptitle_exp[0]','danmark');
'---- sql end ----
Avatar billede expnet Seniormester
03. februar 2007 - 15:35 #2
esben85 -> jeg er ikke helt med hvordan du vil få det ind i mit script så den stdigvæk visser alle bokse og kun visser nyheder som kommer fra subnavnet og danmark
Avatar billede esben85 Nybegynder
03. februar 2007 - 18:31 #3
Så er jeg ikke sikker på, jeg forstår, hvad du mener. Er der en relation mellem 'bokse' og 'nyheder'?

Er det korrekt forstået, at hvis querien ikke returnerer noget resultat på nyheder.omraade = $hptitle_exp[0], så skal den returnere nyheder.omraade = 'danmark'?
Avatar billede expnet Seniormester
03. februar 2007 - 21:43 #4
ja men den skal udskrive alle bokse og så skal den udskrive

hvis der er noget
nyheder.omraade = $hptitle_exp[0] også danmark

ellers skal den udskrive
danmark
Avatar billede esben85 Nybegynder
03. februar 2007 - 23:36 #5
Nu henter den en tabel ud med alle boksene. Hvis en nyhed passer med en boks, bliver den smidt med ud. Hvis ikke en nyhed passer i en boks. får nyhed_id en null-værdi. og det kan du så bruge til at tjekke for indhold.

select bokse.id,bokse.toptitle,bokse.pos,db1.id as nyhed_id,omraade,kontakt,kilde,billede,overskrift,topindhold,indhold,artid,dato,vardato,nyhed_var,filnavn
from (bokse left outer join
    ((select * from nyheder where nyheder.omraade = '$hptitle_exp[0]' or nyheder.omraade = 'danmark') as db1) on
    bokse.id = db1.artid)
where bokse.pos = 'right';

Her er et skema over den tabel du får ud:
db1 (
    id,
    toptitle,
    pos,
    nyhed_id,
    omraade,
    kontakt,
    kilde,
    billede,
    overskrift,
    topindhold,
    indhold,
    artid,
    dato,
    vardato,
    nyhed_var,
    filnavn
);
id, toptitle og pos har altid en værdi, mens resten har en de værdier der passer til. Til poster der ikke passer, har de værdien null.
Avatar billede expnet Seniormester
04. februar 2007 - 02:11 #6
$SQL = "select bokse.id,bokse.toptitle,bokse.pos,db1.id as nyhed_id,omraade,kontakt,kilde,billede,overskrift,topindhold,indhold,artid,dato,vardato,nyhed_var,filnavn
from (bokse left outer join
((select * from nyheder where nyheder.omraade = '$hptitle_exp[0]' or nyheder.omraade = 'danmark') as db1) on bokse.id = db1.artid)
where bokse.pos = 'left'";

det er den har fejl jeg få::

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from nyheder where nyheder.omraade = 'vestjyllands' or
Avatar billede esben85 Nybegynder
04. februar 2007 - 02:21 #7
...nyheder.omraade = '".$hptitle_exp[0]."' or nyhede...
Avatar billede expnet Seniormester
04. februar 2007 - 02:28 #8
$SQL = "select bokse.id,bokse.toptitle,bokse.pos,db1.id as nyhed_id,omraade,kontakt,kilde,billede,overskrift,topindhold,indhold,artid,dato,vardato,nyhed_var,filnavn
from (bokse left outer join
((select * from nyheder where nyheder.omraade = '".$hptitle_exp[0]."' or nyheder.omraade = 'danmark') as db1) on bokse.id = db1.artid)
where bokse.pos = 'left'";

----- samme fejl ------

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from nyheder where nyheder.omraade = 'vestjyllands' or
Avatar billede esben85 Nybegynder
04. februar 2007 - 02:56 #9
det virker underligt. da jeg testede det på min på min mysql-server virkede det fint, og der kom ingen syntax-fejl.

prøv om du kan lokalisere, hvad der er fejlen. forsøg i første omgang med at udelade fx.
nyheder.omraade = '".$hptitle_exp[0]."' or, så der bare står
...((select * from nyheder where nyheder.omraade = 'danmark') as db1) on...
Avatar billede expnet Seniormester
04. februar 2007 - 03:05 #10
kan det ikke laves på en anden måde evt. med to forspørgelser eller hvad...
Avatar billede expnet Seniormester
04. februar 2007 - 03:19 #11
$SQL = "select bokse.id,bokse.toptitle,bokse.pos,db1.id as nyhed_id,omraade,kontakt,kilde,billede,overskrift,topindhold,indhold,artid,dato,vardato,nyhed_var,filnavn
from (bokse left outer join
    (select * from nyheder where nyheder.omraade = '$hptitle_exp[0]' or nyheder.omraade = 'danmark') as db1 on
    bokse.id = db1.artid)
where bokse.pos = 'left'";

hvis den ser sådan ud kommer der det her frem men synes ikke at den lister nyhedere for hver boks

stdClass Object
(
    [id] => 11
    [toptitle] => Dødsfald
    [pos] => left
    [nyhed_id] =>
    [omraade] =>
    [kontakt] =>
    [kilde] =>
    [billede] =>
    [overskrift] =>
    [topindhold] =>
    [indhold] =>
    [artid] =>
    [dato] =>
    [vardato] =>
    [nyhed_var] =>
    [filnavn] =>
)
   
Dødsfald

stdClass Object
(
    [id] => 12
    [toptitle] => Læserbreve
    [pos] => left
    [nyhed_id] =>
    [omraade] =>
    [kontakt] =>
    [kilde] =>
    [billede] =>
    [overskrift] =>
    [topindhold] =>
    [indhold] =>
    [artid] =>
    [dato] =>
    [vardato] =>
    [nyhed_var] =>
    [filnavn] =>
)
   
Læserbreve
Avatar billede esben85 Nybegynder
04. februar 2007 - 11:58 #12
Jeg har ind til videre gået ud fra, at nyheder.artid peger på bokse.id. Hvis ikke det er tilfældet. så vil der selvfølgelig ikke komme de rigtige nyheder.

Hvilket felt bruger du i nyheder til at referere til bokse.id?
Avatar billede expnet Seniormester
04. februar 2007 - 14:23 #13
artid i tabellen nyheder passer til id'et i bokse tabellen
Avatar billede esben85 Nybegynder
04. februar 2007 - 19:05 #14
Så må du forklare dig lidt mere præcist.
Som jeg har forstået det, så skal samtlige bokse vises.
Hvis en nyhed passer med søgeordet på 'omraade', skal den vises i den dertilhørende boks.
De bokse, hvor der ikke findes nogen nyheder til skal vises alligevel, men står tomme.
Avatar billede expnet Seniormester
05. februar 2007 - 01:02 #15
ja lige præsic
Avatar billede esben85 Nybegynder
05. februar 2007 - 01:26 #16
Jamen så skal der da heller ikke være nyheder i alle de bokse du får tilbage som resultat.  - Det er selvfølgeligt et problem, hvis alle bokse står tomme.

Du skal ikke indsætte 2 forespørgsler i databasen (Som du gør i dit eksempel), men nøjes med denne ene, og så iterere over den.
Avatar billede expnet Seniormester
13. februar 2007 - 21:07 #17
esben85 udmidbaret skulle det køre :o) så vil du svare så du kan få nogle point fordi du ville gøre et forsøg på at få det til at virke...

med få ord "Takker for hjælpen!!" :D)

//expnet
Avatar billede esben85 Nybegynder
13. februar 2007 - 23:45 #18
svar
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