Avatar billede bigo Nybegynder
24. januar 2003 - 13:05 Der er 7 kommentarer og
1 løsning

Søgning igennem relationstabeller

Hejsa.

Jeg har følgende database setup:

#
# Struktur dump for tabellen `courses`
#
CREATE TABLE courses (
  course_id int(3) NOT NULL auto_increment,
  course_name varchar(255) NOT NULL default '',
  PRIMARY KEY  (course_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `cuisines`
#
CREATE TABLE cuisines (
  cuisine_id int(3) NOT NULL auto_increment,
  cuisine_name varchar(255) NOT NULL default '',
  PRIMARY KEY  (cuisine_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `ingred_relation`
#
CREATE TABLE ingred_relation (
  ingredient_id int(3) NOT NULL default '0',
  opskrift_id int(3) NOT NULL default '0',
  description text NOT NULL
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `ingredients`
#
CREATE TABLE ingredients (
  ingredient_id int(3) NOT NULL auto_increment,
  ingredient_name varchar(100) NOT NULL default '',
  PRIMARY KEY  (ingredient_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `kinds`
#
CREATE TABLE kinds (
  kind_id int(3) NOT NULL auto_increment,
  kind_name varchar(255) NOT NULL default '',
  PRIMARY KEY  (kind_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `opskrifter`
#
CREATE TABLE opskrifter (
  opskrift_id int(5) NOT NULL auto_increment,
  opskrift_navn varchar(255) NOT NULL default '',
  opskrift_beskrivelse longtext NOT NULL,
  PRIMARY KEY  (opskrift_id)
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `relationer`
#
CREATE TABLE relationer (
  opskrift_id int(3) NOT NULL default '0',
  course_id int(3) NOT NULL default '0',
  cuisine_id int(3) NOT NULL default '0',
  kind_id int(3) NOT NULL default '0',
  wine_id int(3) NOT NULL default '0'
) TYPE=MyISAM;
# --------------------------------------------------------
#
# Struktur dump for tabellen `wines`
#
CREATE TABLE wines (
  wine_id int(3) NOT NULL auto_increment,
  wine_name varchar(255) NOT NULL default '',
  wine_district varchar(255) NOT NULL default '',
  wine_year int(4) NOT NULL default '0',
  PRIMARY KEY  (wine_id)
) TYPE=MyISAM;


Jeg vil gerne kunne lave en select sætning hvor jeg søger efter en variabel (f.eks. curry) hvor den skal lede alle felter igennem (undtagen dem hvor der står et id i recordnavnet)

Jeg har lavet noget der ligner:

$search_crit = " opskrift_navn LIKE '%$search%' OR ";
$search_crit .= "opskrift_beskrivelse LIKE '%$search%' OR ";
$search_crit .= "course_name LIKE '%$search%' OR ";
$search_crit .= "cuisine_name LIKE '%$search%' OR ";
$search_crit .= "ingredient_name LIKE '%$search%' OR ";
$search_crit .= "kind_name LIKE '%$search%' OR ";
$search_crit .= "wine_name LIKE '%$search%' OR ";
$search_crit .= "wine_year LIKE '%$search%' OR ";
$search_crit .= "wine_district LIKE '%$search%' OR ";
$search_crit .= "description LIKE '%$search%' ";
$sql = "SELECT * FROM ingred_relation, relationer
    LEFT JOIN ingredients ON ingredients.ingredient_id = ingred_relation.ingredient_id
    LEFT JOIN opskrifter ON opskrifter.opskrift_id = relationer.opskrift_id
    LEFT JOIN courses ON courses.course_id = relationer.course_id
    LEFT JOIN cuisines ON cuisines.cuisine_id = relationer.cuisine_id
    LEFT JOIN wines ON wines.wine_id = relationer.wine_id
    LEFT JOIN kinds ON kinds.kind_id = relationer.kind_id
    WHERE ".$search_crit."
GROUP BY relationer.opskrift_id";

men den finder alle opskrifter uanset hvad jeg sætter som $search.
Avatar billede morw Nybegynder
24. januar 2003 - 14:33 #1
Burde du ikke lave en SELECT * FROM opskrifter og så herefter joine de forskellige relationer.

Kan ikke lige overskue dine relationer uden en E/R model
Avatar billede bigo Nybegynder
24. januar 2003 - 14:45 #2
kan man få phpmyadmin til at lave en sådan ;-)
Avatar billede morw Nybegynder
24. januar 2003 - 14:53 #3
Kan du ikke slette din relationer tabel og flytte disse over i opskift:

  course_id int(3) NOT NULL default '0',
  cuisine_id int(3) NOT NULL default '0',
  kind_id int(3) NOT NULL default '0',
  wine_id int(3) NOT NULL default '0'

og så herefter lave nogle individuelle link-tabeller til at håndtere dine mange-til-mange relationer?
Avatar billede bigo Nybegynder
24. januar 2003 - 14:56 #4
det burde man måske gøre. jeg kigger lige lidt på det.
Avatar billede bigo Nybegynder
24. januar 2003 - 14:59 #5
Har lige kigget efter og testet med andre (og flere data) og kan ikke se andet end at det rent faktisk virker.. forstår ikke men det gør det nu engang.. såe..

smid et svar og du får points som tak for udvist vilje..
Avatar billede morw Nybegynder
24. januar 2003 - 15:02 #6
Hehe Cool! Kan det ses på en side i funktion?
Avatar billede bigo Nybegynder
24. januar 2003 - 15:26 #7
www.dulmens.dk/tobias

tag dig ikke af data der er i basen.. det er rent gylle for test kun..
Avatar billede morw Nybegynder
24. januar 2003 - 15:31 #8
Ja, det er vist ikke lige der jeg finder ud af hvad jeg skal have at spise i aften ;-D
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
Computerworld tilbyder specialiserede kurser i database-management

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