Zoeken in verschillende tabellen.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rune Laenen

Rune Laenen

31/10/2012 12:51:10
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
PHP hulp

PHP hulp

26/04/2024 16:04:18
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

31/10/2012 13:21:08
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
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%')
 
Rune Laenen

Rune Laenen

31/10/2012 13:49:16
Quote Anchor link
Dankuwel voor uw reactie.
Nu heb ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'] . '%') . ")");

Maar nu gaat hij elk liedje in de database 2 keer laten zien...
>> http://seseria.be/ajax/zoek.php?zoek=basto
 
Bart V B

Bart V B

31/10/2012 14:11:04
Quote Anchor link
Volgens mij kan je hiervoor DISTINCT gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
$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'] . '%') . ")");
 
Rune Laenen

Rune Laenen

31/10/2012 14:21:26
Quote Anchor link
Bart V B op 31/10/2012 14:11:04:
Volgens mij kan je hiervoor DISTINCT gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
$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 :/
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

31/10/2012 15:33:42
Quote Anchor link
Dat klopt, je maakt er een cross join van, kijk in mijn eerdere query
 
Rune Laenen

Rune Laenen

31/10/2012 20:27:51
Quote Anchor link
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)
PHP script in nieuw venster Selecteer het PHP script
1
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'] . '%') . ")
)
");

Dankuwel!
 
Aad B

Aad B

31/10/2012 22:10:37
Quote Anchor link
@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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.