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
  1. <?php  
  2. // gondolom ez adott az űrlapból...  
  3. $varosok = array('egy''ketto''harom', ...);  
  4.   
  5. $select_cmd="select * from hirderesek where";  
  6. foreach ($varosok as $id => $varos) {  
  7.   $select_cmd.="varos=".$varos." or";  
  8. }  
  9. // utolsó felesleges or legvágása  
  10. $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...
  1. <?php  
  2.   
  3. include ("kap.php");  
  4.   
  5. global $kapcsolat;    
  6. $varosok = array ('Budapest''Debrecen');  
  7.   
  8. $select_cmd="select * FROM hirdetesek  WHERE ";  
  9. foreach ($varosok as $hely => $varos)   
  10. {  $select_cmd.="hely= "."'$varos'"." or ";}  
  11. $select_cmd=substr($select_cmd,0,-4);  
  12.   
  13. $eredmeny = mysql_query("$select_cmd",$kapcsolat);  
  14.       
  15.              if ( ! $eredmeny )  
  16.       die ( "A rendeszer nem elérhetõ: ".mysql_error() );          
  17.         
  18.     while ($esemeny = mysql_fetch_array( $eredmeny ) )  
  19.     {  
  20.     $sor = $esemeny["hely"];  
  21.     $pozicio = $esemeny["pozicio"];  
  22.       
  23.       
  24.     print "$sor ---- $pozicio<br>";  
  25. }  
  26.   
  27.   
  28. ?>  
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:)
  1. <form name="varos" method="post" action="pr.php"><br>  
  2.             <div align="center">  
  3.               <select name="varos" size="5" class="forma" id="" multiple>  
  4. <?php  
  5. global $kapcsolat;        
  6.     $eredmeny = mysql_query( "SELECT distinct $sor  from hirdetesek "$kapcsolat );  
  7.              if ( ! $eredmeny )  
  8.       die ( "hiba: ".mysql_error() );  
  9.            
  10.         
  11.     while ($esemeny = mysql_fetch_array( $eredmeny ) )  
  12.     {  
  13.     $hely = $esemeny["$sor"];  
  14.       
  15.       
  16.       
  17.    
  18.   print "<option value='$hely'>$hely</option>";  
  19.    
  20.   }    
  21. ?>  
  22.   
  23. </select>  
9

Tehát

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

akkor
  1. <?php  
  2. $param=implode(" or ",$varosok);  
  3. $select_cmd="select varos from hirdetes ".$param;  
vagy
  1. <?php  
  2. $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
  1. <?php  
  2. $varosok = array('egy''ketto''harom', ...);  
  3. $select_cmd="select varos from hirdetes where varos in ('".  
  4.   implode(', '$varosok)."')";  
  5. ?>  
--------
Poetro