[MySQL] Zoekresultaat uit meerdere tables

Pagina: 1
Acties:

  • Glitchy
  • Registratie: Januari 2004
  • Laatst online: 01-12 06:27
Ik ben bezig om een search engine te maken voor mijn site via php en mysql,
nu heb ik op de index.php een search form met php gemaakt en probeer ik met een mysql query resulataten te halen uit meerdere tables.

Dat ziet er nu zo uit

// HET VEILIG MAKEN VAN DE INVOER ZODAT ZE GEEN SCHADE AAN DE DATABASE KUNNEN AANRICHTEN
$zoekwoord = ereg_replace("[\"\'\;<>%]", "", $_POST['zoekwoord']);
$zoekwoord = addslashes($zoekwoord);
$zoekwoord = strip_tags($zoekwoord);
$volgorde = "name";
$query = MYSQL_QUERY("SELECT * FROM snes, n64 WHERE name LIKE '%".$zoekwoord."%' ORDER BY ".$volgorde."");

}

if($_POST['zoeken'] && $_POST['zoekwoord'])
{
echo "<tr>\n";
echo "<td colspan='3'>Searchresult for '".$zoekwoord."'<br><br></td>\n";
echo "</tr>\n";
}


Dus hij moet zowel uit de database snes als de database n64 resulaten halen die overeenkomen met het zoekwoord, alleen werkt dit niet en haalt hij alleen resulataten uit de database snes.
Wie weet hoe ik dit kan oplossen?

[ Voor 11% gewijzigd door Glitchy op 18-02-2007 15:00 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Ten eerste zijn dat geen databases, maar tabellen. Ten tweede weet ik bijna zeker dat je database model behoorlijk brak is. Tot slot ben jij nu twee tabellen aan het joinen zonder een join conditie op te geven. Eigenlijk dus een carthaans product. Wil je met dit model alle records terugkrijgen met die name dan zul je een query op beide tabellen los moeten laten.

Wat je beter kunt doen is een fatsoenlijker db ontwerp maken. Ik neem aan dat het hier over spellen gaat? Waarom zouden spellen die voor een andere console zijn in een andere tabel moeten? Het wordt een stuk makkelijker wanneer je een tabel met alle spellen hebt en hier enkel een kolom aan toevoegd die aangeeft voor welke console dat spel is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Glitchy
  • Registratie: Januari 2004
  • Laatst online: 01-12 06:27
Janoz schreef op zondag 18 februari 2007 @ 15:06:
Ten eerste zijn dat geen databases, maar tabellen. Ten tweede weet ik bijna zeker dat je database model behoorlijk brak is. Tot slot ben jij nu twee tabellen aan het joinen zonder een join conditie op te geven. Eigenlijk dus een carthaans product. Wil je met dit model alle records terugkrijgen met die name dan zul je een query op beide tabellen los moeten laten.

Wat je beter kunt doen is een fatsoenlijker db ontwerp maken. Ik neem aan dat het hier over spellen gaat? Waarom zouden spellen die voor een andere console zijn in een andere tabel moeten? Het wordt een stuk makkelijker wanneer je een tabel met alle spellen hebt en hier enkel een kolom aan toevoegd die aangeeft voor welke console dat spel is.
Oke, bedankt voor het advies
Het probleem is dat ik namelijk al allemaal tabellen heb aangemaakt voor de verschillende consoles.
Hoe zou ik dan een query kunnen maken die beide tabellen aanspreekt?

  • analog_
  • Registratie: Januari 2004
  • Niet online
Lees eens wat over database ontwerp aub.

  • Dido
  • Registratie: Maart 2002
  • Laatst online: 10:34

Dido

heforshe

Sjaakiedederde schreef op zondag 18 februari 2007 @ 16:38:
[...]

Oke, bedankt voor het advies
Het probleem is dat ik namelijk al allemaal tabellen heb aangemaakt voor de verschillende consoles.
Hoe zou ik dan een query kunnen maken die beide tabellen aanspreekt?
Niet, tussen tabellen heb je dan een relatie nodig, en die is er niet.

Je kunt eventueel met UNION aan de slag, moet je wel je queries aanpassen als er een nieuwe console uitkomt. Dat moet je sowieso met dit "datamodel", dus ik zou toch echt de moeite nemen je model aan te passen; dat kost nu wat tijd en moeite, maar bespaart je enorm veel gekloot, nu en in de toekomst.

Wat betekent mijn avatar?


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Tabel per console met verder allemaal dezelfde kolommen is geen goed datamodel. Als je dat niet wil fixen en zo snel mogelijk je huidige zoekprobleempje wil oplossen: union. Gewoon de union van afzonderlijke searches nemen. Van deze pleistermethode ga je op de korte termijn alsnog hard balen, bijvoorbeeld als er meer console tabellen moeten komen.

Je kan beter je huidige dev werk stil leggen en wat broodnodige kennis op gaan doen, dmv een goede tutorial of boek. :) Ook je PHP kennis mag wat beter, ereg_replace is niet nodig, die replace kan je ook uitvoeren zonder regular expressions (performance), dus ik vermoed eerlijk gezegd dat je de ereg_replace call ook maar ergens blindelings vandaan gekopieerd hebt. ;)

{signature}

Pagina: 1