ugrás a tartalomhoz

Álláshirdetések adatlistázása három kapcsolódó táblával

Anonymous · 2005. Szep. 30. (P), 11.43
Sziasztok! Egy álláshirdető oldalt csinálok, és listázni szeretném az adatbázisba(MYSQL) található hirdetéseket, a következőképpen.
Az adatbázisom:
1. tábala: a hirdetők adatai
2. tábla: a hirdetések
3. tábla: a állás tipusa
Ha valaki felvisz egy hirdetést, meg kell adni, az állás tipusát, amit beírok az "állás tipusa" táblába, és a "hirdetések" táblába is.
A kérdésem: ha több állás tipust is kiválasztanak, azt hogy tudom lekérni?
 
1

kapcsoló tábla

Jano · 2005. Szep. 30. (P), 11.56
Csinálj egy összekötö táblát a hirdetés és típus közé. 3 mezője lesz: id, hirdetes_id, tipus_id ha több tipusba kerül egy hírdetés akkor ebbe a táblába egyszerűen többször kerül be.

Pl: hirdetesed azonosítója: 23
lakas hirdetes azonosítója: 12
irodahelyseg azonosítója: 45

akkor a kapcsoló táblába felveszel egy 23-12 es egy 23-45 párt is.

Lekérdezni meg úgy tudod, hogy megvan gondolom a tipus azonosítója es akkor:
select hirdetes.cim, hirdetes.szoveg FROM hirdetes, hirdetes_tipus WHERE (hirdetes.id = hirdetes_tipus.hirdetes_id) AND (hirdetes_tipus.tipus_id = ITT_A_TIPUS_KODJA)
2

Erre gondoltál?

-zsolti- · 2005. Szep. 30. (P), 11.56
SELECT * FROM tábla WHERE allastipus = '1' OR allastipus = '2'

Ilyesmire gondoltál?

Üdvözlettel: Liebig Zsolt
SWEN Internet
3

Ezt már próbáltam

Anonymous · 2005. Szep. 30. (P), 12.23
Igen, ezt már próbáltam, csak az a bajom vele, hogy úgy akarom lekérdezni az adatokat, hogy a hirdetési tipus táblában lévő adatokat kilistázom egy <select> elemmel, amiből több állás tipust is ki lehet választani! Az a bajom hogy nem tudom hogy mennyi allastipust fognak kijelölni, és az állástipusok számát se tudom, mert az is mindig változik, ha feladnak egy új hirdetést...
4

Erről az oldalról van szó

Anonymous · 2005. Szep. 30. (P), 12.39
Érthetőbb ha megadom az oldal címét: http://multimunka.uw.hu
Az oldal még nem működik, de a részletes keresést meg tudod nézni. Ott van, hogy hely szerinti, és hirdető cég szerinti keresés. A várost is úgy csináltam, hogy ha felvisznek egy hirdetést, meg kell adni azt hogy, melyik városba van a munka. Ezt beírom a hirdetések táblába, ill a város táblába. A város táblába csak 1 oszlop van, a város nevével!
5

Minek kell a város tábla?

halee · 2005. Szep. 30. (P), 13.07
Minek kell a város tábla?? Azzal később csak problémák lesznek a karbantartás során, hogy ha egy hírdetés lejár, törlik, stb, akkor végig kell majd nézned a hirdetések táblát, hogy az adott város (amit törölnek) még szerep-e benne, vagy törölnöd kell a városok táblából.
Ezen túl pedig értelmetlen redundancia lesz az adatbázisban ami soha nem jó.

A város tábla adatait egy egyszerű kóddal a hírdetések táblából is lekérdezheted.

select distinct varos from hirdetesek

azt hiszem ez mysql-ben is elnyomja az ismétlődést

ha nem akkor meg egy pár soros php kóddal ugyanezt megteheted.
6

Hogy listázom?

Anonymous · 2005. Szep. 30. (P), 13.38
Ezen már én is gondolkodtam, és a "distinct" -tel nem ismétlődik:) De azt még mindig nem tudom, hogy érjem el, a kiválasztott városoknak megfelelő hirdetéseket! Most kilistázom a hirdetések menüből azokat a városokat, ahol van álláshirdetés. Ha valaki, kiválaszt pl 4 várost, azt hogy fogom kilistázni?
select * from hirdetesek WHERE varos='első város' or varos='masodik város' ... stb ezt használom abban az esetben, ha fix adatokkal dolgozom. De ebben az esetben nem tudom hogy hány város van az adatbázisban megadva!
7

Megoldás

halee · 2005. Szep. 30. (P), 14.08

<?php
// gondolom ez adott az űrlapból...
$varosok = array('egy', 'ketto', 'harom', ...);

$select_cmd="select * from hirderesek where";
foreach ($varosok as $id => $varos) {
  $select_cmd.="varos=".$varos." or";
}
// utolsó felesleges or legvágása
$select_cmd=substr($select_cmd,0,-3);
8

implode

Dualon · 2005. Szep. 30. (P), 16.20
implode()-dal kihagyható a substr().
11

Kössz mindenkinek a segítséget!

Anonymous · 2005. Okt. 2. (V), 17.03
Nekem hale megoldása működik csak...
<?php

include ("kap.php");

global $kapcsolat;	
$varosok = array ('Budapest', 'Debrecen');

$select_cmd="select * FROM hirdetesek  WHERE ";
foreach ($varosok as $hely => $varos) 
{  $select_cmd.="hely= "."'$varos'"." or ";}
$select_cmd=substr($select_cmd,0,-4);

$eredmeny = mysql_query("$select_cmd",$kapcsolat);
	
       		 if ( ! $eredmeny )
      die ( "A rendeszer nem elérhetõ: ".mysql_error() );		 
	  
    while ($esemeny = mysql_fetch_array( $eredmeny ) )
    {
	$sor = $esemeny["hely"];
	$pozicio = $esemeny["pozicio"];
	
    
	print "$sor ---- $pozicio<br>";
}


?>
De nem tudom, hogy postoljam át, a <select>- böl az adatokat!
Így iratom ki a városokat, és a fenti kóddal olvasnám ki, a hozzá tartozó többi adatot! Azt nem tudom, hogy csináljak a lenti kódból tömböt, hogy átküldhessem a fenti kódnak:)
<form name="varos" method="post" action="pr.php"><br>
            <div align="center">
              <select name="varos" size="5" class="forma" id="" multiple>
<?php
global $kapcsolat;		
    $eredmeny = mysql_query( "SELECT distinct $sor  from hirdetesek ", $kapcsolat );
    		 if ( ! $eredmeny )
      die ( "hiba: ".mysql_error() );
		 
	  
    while ($esemeny = mysql_fetch_array( $eredmeny ) )
    {
	$hely = $esemeny["$sor"];
	
	
	
 
  print "<option value='$hely'>$hely</option>";
 
  }  
?>

</select>
9

Tehát

halee · 2005. Szep. 30. (P), 17.42
valóban erről meg is feledkeztem:

akkor

<?php
$param=implode(" or ",$varosok);
$select_cmd="select varos from hirdetes ".$param;
vagy

<?php
$select_cms="select varos from hirdetes".implode(" or ",$varosok);
10

nem tudom, ez mennyire szép megoldás

Poetro · 2005. Szep. 30. (P), 22.25

<?php
$varosok = array('egy', 'ketto', 'harom', ...);
$select_cmd="select varos from hirdetes where varos in ('".
  implode(', ', $varosok)."')";
?>
--------
Poetro