Zoeken in verschillende tabellen.
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
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
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
Code (php)
1
$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:
Je moet kolommen gewoon benoemen in de select list, en geen * gebruiken.
Dus:
Dankuwel voor uw reactie.
Nu heb ik dit:
Maar nu gaat hij elk liedje in de database 2 keer laten zien...
>> http://seseria.be/ajax/zoek.php?zoek=basto
Nu heb ik dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
$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'] . '%') . ")");
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.
Bart V B op 31/10/2012 14:11:04:
Volgens mij kan je hiervoor DISTINCT gebruiken.
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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'] . '%') . ")
)
");
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.
Gewijzigd op 31/10/2012 22:11:28 door Aad B




