Voor een website moet ik een zoekmachine maken die door de database zoekt.
Ik heb (oa) 1 tabellen waarin gezocht moet worden: songs en artists.
Je kan dan zoeken op songs->title en op artists->name. Ik heb nu
$lQuery = DB::query("SELECT * FROM songs WHERE songs.title LIKE(" . DB::escape('%' . $_GET['zoek'] . '%') . ") OR artists.name LIKE(" . DB::escape('%' . $_GET['zoek'] . '%') . ")"); 

maar dat werkt dus niet.
Om de resultaten te printen heb ik enkel de gegevens van songs nodig.
Wie o wie kan mij helpen?
Alvast bedankt voor het lezen :)

Mvg,
Rune
Je moet de artists tabel wel joinen, je zal nu wel een sql error hebben.
Je moet kolommen gewoon benoemen in de select list, en geen * gebruiken.
Dus:

SELECT
	s.song_id,
	s.title
FROM
	songs AS S, artists AS a
WHERE
	s.artist_id = a.artist_id
AND
	(s.title LIKE '%princes%' OR a.artists LIKE '%princes%')

Dankuwel voor uw reactie.
Nu heb ik dit:
$lQuery  = DB::query("SELECT
    s.id,

    s.title,
	s.artist,
	s.genre
FROM
    songs AS s, artists AS a
WHERE
    s.title LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")
OR 
	a.name LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")");

Maar nu gaat hij elk liedje in de database 2 keer laten zien...
>> http://seseria.be/ajax/zoek.php?zoek=basto
Volgens mij kan je hiervoor DISTINCT gebruiken.

$lQuery  = DB::query("SELECT DISTINCT
    s.id,

    s.title,
    s.artist,
    s.genre
FROM
    songs AS s, artists AS a
WHERE
    s.title LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")
OR 
    a.name LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")");
Bart V B op 31/10/2012 14:11:04

Volgens mij kan je hiervoor DISTINCT gebruiken.

$lQuery  = DB::query("SELECT DISTINCT
    s.id,

    s.title,
    s.artist,
    s.genre
FROM
    songs AS s, artists AS a
WHERE
    s.title LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")
OR 
    a.name LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")");



Bij deze laat hij alle nummers nog steeds zien :/
Dat klopt, je maakt er een cross join van, kijk in mijn eerdere query
Ger van Steenderen op 31/10/2012 15:33:42

Dat klopt, je maakt er een cross join van, kijk in mijn eerdere query


Ja, ik zie het, deze werkt:
$lQuery  = DB::query("SELECT DISTINCT
    s.id,
    s.title,
    s.artist,
    s.genre
FROM
    songs AS s, artists AS a
WHERE
	s.artist = a.id
AND(
		s.title LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")
	OR	
		a.name LIKE (" . DB::escape('%' . $_GET['zoek'] . '%') . ")
)
");

Dankuwel!
@Bart V B de tip DINSTINCT gebruiken wordt te pas en te onpas gegeven. Dubbele records en men past al snel een DISTINCT toe zonder uit te zoeken waarom er dubbele records voorkomen. DISTINCT wordt dus vaak oneigenlijk toegepast en dat zal later altijd nieuwe problemen introduceren. En on-this-topic: een DISTINCT waarbij ook een id wordt geselecteerd (dat meestal een unique id is) doet helemaal NIETS.

Reageren