Advanced Database Search
**Wat mijn script moet doen:** I got a database with items and another database with mixes between mutiple items. Visitors select the items they like and the script would look into the database to see if there are any mixes between those items avaliable.
**Wat ik geprobeerd heb & het probleem:**
Ik heb zelf niet veel codes, want ik wist nieteens hoe ik de "second database" moet instellen.
Dit is de code die ik tot nu toe heb:
Quote:
// 1. make array from the input
$input_array = array(2, 6, 133, 75, 12, 9, 3, 52, 93, 23, 1);
// 2. get all rows where item is in the array
$input_array = join(', ', $ids);
$query = "SELECT * FROM mix_database WHERE item_id IN ($input_array)";
// 3. compare the amount of mix_id's in the query above with the amount of mix_id's in mix_database
$input_array = array(2, 6, 133, 75, 12, 9, 3, 52, 93, 23, 1);
// 2. get all rows where item is in the array
$input_array = join(', ', $ids);
$query = "SELECT * FROM mix_database WHERE item_id IN ($input_array)";
// 3. compare the amount of mix_id's in the query above with the amount of mix_id's in mix_database
Stap drie kan dus niet zo gedaan worden doordat er meerdere items gebruikt kunnen worden bij verschillende mixen.
Hoop dat ik het duidelijk genoeg heb opgeschreven.
Kan iemand me helpen met zoeken door de database?
Gewijzigd op 01/10/2014 20:20:14 door Ibrahim A
De laatste tabel (die jij dan 'Second database' noemt) die noemen wij een koppeltabel. (althans als ik je goed begrijp).
Een koppeltabel verbindt een many-to-many relatie tussen twee tabellen.
een simpele vergelijking:
artikelen kunnen in meerdere categorieën vallen en categorieën kunnen ook meerdere artikelen bezitten:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
artikel
id | name
1 | racefiets
2 | skies
categorie
id | name
1 | sport
2 | winter
3 | fietsen
artikel_categorie (koppeltabel)
artikel_id | categorie_id
1 | 1
1 | 3
2 | 1
2 | 2
id | name
1 | racefiets
2 | skies
categorie
id | name
1 | sport
2 | winter
3 | fietsen
artikel_categorie (koppeltabel)
artikel_id | categorie_id
1 | 1
1 | 3
2 | 1
2 | 2
Koppeltabellen hoeven geen primay index (id) te hebben.
vervolgens kun je met JOIN's de gewenste resultaten ophalen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
artikel.id, artikel.name, categorie.name as categorie
FROM
artikel
LEFT JOIN
artikel_categorie
ON
artikel.id = artikel_categorie.artikel_id
LEFT JOIN
categorie
ON
categorie.id = artikel_categorie.categorie_id
WHERE
categorie.name = 'sport'
artikel.id, artikel.name, categorie.name as categorie
FROM
artikel
LEFT JOIN
artikel_categorie
ON
artikel.id = artikel_categorie.artikel_id
LEFT JOIN
categorie
ON
categorie.id = artikel_categorie.categorie_id
WHERE
categorie.name = 'sport'
- Behalve de Left join zijn er ook andere join vormen.
- de WHERE clause is natuurlijk optioneel.
Toevoeging op 01/10/2014 21:57:14:
resultaat:
Code (php)
1
2
3
4
2
3
4
id | name | categorie
--------------------------
1 | Racefiets | sport
2 | Skies | sport
--------------------------
1 | Racefiets | sport
2 | Skies | sport
Gewijzigd op 01/10/2014 21:49:42 door Frank Nietbelangrijk