Toon posts:

[MYSQL] een gecombineerde search.

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi, ik ben nu weer bezig met me gallery's! B-)

en wil nu een grote query uitvoeren! ;)

als volgt, stel ik wil de volgende items zoeken in me databeest voornaam, achternaam, plaatje size > 100kb, en views van het plaatje > 10

mijn databeest heeft de volgende tabellen
tabel: gallery
id
gallerynaam (firstname / lastname)
etc etc etc

tabel: plaatje
id
plaatje naam
plaatje size
plaatje views
etc etc etc
nu wil ik dus een search maken met mysql dat ik uit alle gallery's waar de voornaam/achernaam in voor komt de plaatjes laten zien met een minimale grote van > 100kb en minimaal 10 views..

Hoe ga ik dit voorelkaar krijgen? :D

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je hebt je query in tekst?
Wat is dan nog het probleem :?

Verwijderd

Topicstarter
Neen, ik heb nog geen query in text want ik weet niet hoe ik dit voorelkaar moet krijgen..

hoe kan ik zorgen dat ik eerst de juiste gegevens uitlees uit de gallery tabel en daarna de query doorvoer op de 'plaatjes' :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 28 april 2002 18:02 schreef xtentic het volgende:
Neen, ik heb nog geen query in text want ik weet niet hoe ik dit voorelkaar moet krijgen..
Heb je wel, je beschrijft wat de query moet doen.
Dan heb je toch al een query in tekst?

Verder verduidelijkt je bovenstaande herhaling je vraag niet echt, leg daar es wat meer van uit.

Verwijderd

Is er wel een link tussen de plaatjes tabel en de gallery tabel?
Misschien dat je een echte dump van je tabellen kunt geven?

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Op http://www.mysql.com staat een heel handige manual waar je dit kan vinden. Gewoon even zoeken op select, join enz...

Systeem | Strava


Verwijderd

Topicstarter
Op zondag 28 april 2002 18:05 schreef ACM het volgende:

[..]

Heb je wel, je beschrijft wat de query moet doen.
Dan heb je toch al een query in tekst?

Verder verduidelijkt je bovenstaande herhaling je vraag niet echt, leg daar es wat meer van uit.
ik heb bv een gallery tabel met de volgende data
code:
1
2
3
4
5
6
id -- naam - sex -- enzo
1 - erik test - man - enzo
2 - dj test - man - enzo
3 - erik dj - man - enzo
4 - man - man - enzo
5 - hoi - vrouw - enzo

en een plaatjes tabel met bv de volgende data
code:
1
2
3
4
5
6
7
8
9
10
11
id -- galleryid -- plaatje -- size -- views
1 - 1 - plaatje1 - 10kb - 10
2 - 1 - plaatje2 - 100kb - 0
3 - 1 - plaatje3 - 100kb - 4
4 - 1 - plaatje4 - 110kb - 100
5 - 1 - plaatje5 - 130kb - 55
6 - 2 - plaatje1 - 10kb - 10
7 - 2 - plaatje2 - 100kb - 0
8 - 2 - plaatje3 - 100kb - 4
9 - 2 - plaatje4 - 110kb - 100
10 - 2 - plaatje5 - 130kb - 55

nu wil ik bv zoeken met mijn search query op alle plaatjes die groter zijn dan 100 kb en 10 views die in de gallery staan waar de naam test in gevonden is


dus 2 query's

$sql = "SELECT * FROM gallery WHERE naam LIKE '%test%'";
$sql = "SELECT * FROM plaatjes WHERE size > '100' AND views > '10'";

dat moet ik dus combineren?... maar van join, group enzo snap ik echt jammer genoeg niets, heb gezocht en geprobeerd te begrijpen maar't wil gewoon niet lukken :(
Op zondag 28 april 2002 18:09 schreef cYbert het volgende:
Is er wel een link tussen de plaatjes tabel en de gallery tabel?
Misschien dat je een echte dump van je tabellen kunt geven?
Sorry, dat zou niet mogelijk zijn, dies veelste complex en te groot, dan ben je echt jaren bezig om daar wat van te maken :+
Op zondag 28 april 2002 18:12 schreef brakkie het volgende:
Op http://www.mysql.com staat een heel handige manual waar je dit kan vinden. Gewoon even zoeken op select, join enz...
-1, die url ken ik al lang; maar daar gaat het niet om... ik snap het niet hoe't moet. :D

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 28 april 2002 18:22 schreef xtentic het volgende:
$sql = "SELECT * FROM gallery WHERE naam LIKE '%test%'";
$sql = "SELECT * FROM plaatjes WHERE size > '100' AND views > '10'";
Als je niet snapt hoe die te joinen moet je eerst maar es een sql-handleiding/tutorial doornemen!

Tipje, de join moet op de verbindende key gebeuren (als je dus in plaatjes de gallery bijhoudt moet natuurlijk de gallery met de zelfde id opgezocht worden en/of vice versa).

Je kan niet van dit soort eenvoudige dingen blijven vragen hoor, het houdt een keer op.

Verwijderd

Topicstarter
Zou je me dan mischien een andere URL geven, ik snap het echt niet... geloof me toch :'(

't lijkt wel of die MySQL voor gevorderde ENGELS Lezers is geschreven :( en zo goed ben ik jammer genoeg niet... spijt me.

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

die url ken ik al lang; maar daar gaat het niet om... ik snap het niet hoe't moet. :D
Dan heb je niet goed genoeg gelezen of je bent te dom :D ;)

Systeem | Strava


  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Op zondag 28 april 2002 18:37 schreef xtentic het volgende:
Zou je me dan mischien een andere URL geven, ik snap het echt niet... geloof me toch :'(

't lijkt wel of die MySQL voor gevorderde ENGELS Lezers is geschreven :( en zo goed ben ik jammer genoeg niet... spijt me.
Alstu :)

http://www.phpfreakz.nl/artikelen.php

http://sql.pagina.nl/

Systeem | Strava


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op zondag 28 april 2002 18:37 schreef xtentic het volgende:
en zo goed ben ik jammer genoeg niet... spijt me.
Dit is min of meer de basis van SQL :?
Zou je je die niet eerst es eigen maken, vooor je ermee begint te stoeien (of op zijn laatst tijdens dat stoeien) ?

  • brammetje
  • Registratie: Oktober 2000
  • Laatst online: 12-01-2025
www.sqlcourse2.com is ook wel leuk om joins te leren.

Verwijderd

Topicstarter
dus als ik het goed heb moet het ongv zo?

SELECT gallery.id, gallery.naam, plaatje.id, plaatje.naam, plaatje.size from gallery, plaatjes WHERE naam LIKE '%naam%' AND size > '100' AND views > '10'

?

oftewel voor mijn db :)
code:
1
2
3
SELECT galleryid.id, galleryid.gallery, galleryphoto.id, galleryphoto.photo, 
galleryphoto.size, galleryphoto.views from galleryid, galleryphoto WHERE gallery 
LIKE '%naam%' AND size > '100' AND views > '10'

werkt namelijk niet :(

krijg een error --> Column: 'views' in where clause is ambiguous

en als ik het nu goed begrijp moet ik voor iederveld alle namen aangeven die ik terug wil hebben? :?

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Je moet in de WHERE clause natuurlijke ook de tabel naam voor je kolom zetten.

Systeem | Strava


Verwijderd

Topicstarter
Op zondag 28 april 2002 19:59 schreef brakkie het volgende:
Je moet in de WHERE clause natuurlijke ook de tabel naam voor je kolom zetten.
sorry dat begrijp ik niet...

ik heb nu dit..
code:
1
2
3
4
5
6
7
8
9
10
SELECT galleryid.id, galleryid.gallery, galleryphoto.id, galleryphoto.photo, 
galleryphoto.size, galleryphoto.views from galleryid, galleryphoto FROM galleryid, galleryphoto WHERE gallery 
LIKE '%naam%' AND size > '100' AND views > '10' LIMIT 0, 30


MySQL retourneerde: 


You have an error in your SQL syntax near 'FROM galleryid, galleryphoto WHERE gallery 
LIKE '%naam%' AND size > '100' AND ' at line 2

maar zoals je ziet geeft dat ook error's :)

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

Xtentic: bouw je query's als volgt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    gallery LIKE '%naam%' 
AND 
    size > '100' 
AND 
    views > '10'

dan heb je imho meer overzicht

Doet iets met Cloud (MS/IBM)


Verwijderd

Topicstarter
dit is trouwens mijn echte db! :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE TABLE galleryid (
  id int(4) NOT NULL auto_increment,
  adddate int(10) default NULL,
  user int(11) NOT NULL default '0',
  level tinyint(4) NOT NULL default '0',
  gallery varchar(75) default NULL,
  country varchar(75) NOT NULL default '',
  path varchar(75) NOT NULL default '',
  sex char(1) NOT NULL default '',
  occupation varchar(75) NOT NULL default '',
  birthdate date NOT NULL default '0000-00-00',
  height int(4) NOT NULL default '0',
  comment varchar(250) NOT NULL default '',
  views int(11) NOT NULL default '0',
  PRIMARY KEY (id),
  KEY gallery(gallery),
  KEY views(views)
) TYPE=MyISAM;

CREATE TABLE galleryphoto (
  id int(4) NOT NULL auto_increment,
  galleryid int(4) NOT NULL default '0',
  user int(11) NOT NULL default '0',
  photo varchar(75) default NULL,
  size varchar(75) default NULL,
  photoX int(4) NOT NULL default '0',
  photoY int(4) NOT NULL default '0',
  comment varchar(250) NOT NULL default '',
  views int(4) NOT NULL default '0',
  PRIMARY KEY (id),
  KEY galleryid(galleryid),
  KEY views(views)
) TYPE=MyISAM;

:D

Verwijderd

Topicstarter
Op zondag 28 april 2002 20:05 schreef D2k het volgende:
Xtentic: bouw je query's als volgt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    gallery LIKE '%naam%' 
AND 
    size > '100' 
AND 
    views > '10'

dan heb je imho meer overzicht
nogsteeds de error :+

Column: 'views' in where clause is ambiguous, en ik zal de manier van query's maken op jou manier proberen voor te zetten :)

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Ik bedoel dat als je een kolom uit galleryphoto wilt hebben dat je dat in je query als bijv: galleryphoto.photo moet aangeven. Ook in je where clause.

Systeem | Strava


Verwijderd

Topicstarter
Op zondag 28 april 2002 20:09 schreef brakkie het volgende:
Ik bedoel dat als je een kolom uit galleryphoto wilt hebben dat je dat in je query als bijv: galleryphoto.photo moet aangeven. Ook in je where clause.
galleryphoto.photo ook in je where clause, dus wat je zegt is where galleryphoto.photo like etc :) :?

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

precies.

Systeem | Strava


Verwijderd

Topicstarter
Op zondag 28 april 2002 20:15 schreef brakkie het volgende:
precies.
L :) L

offtopic:
dat had ik nu niet verwacht
, maar waarom werkt dat ene gedeelte dan wel zonder views?

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Welk ene gedeelte.

Systeem | Strava


Verwijderd

Topicstarter
dat van D2k dat werkt :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    gallery LIKE '%cindy%' 
AND 
    size > '100000'

geeft output
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
id  gallery  id  photo  size  views  
1 Cindy Crawford 1 victoria_adams_1.jpg 73762 4 
1 Cindy Margolis 1 victoria_adams_1.jpg 73762 4 
2 Cindy Crawford 2 victoria_adams_2.jpg 22460 5 
2 Cindy Margolis 2 victoria_adams_2.jpg 22460 5 
3 Cindy Crawford 3 victoria_adams_3.jpg 41138 5 
3 Cindy Margolis 3 victoria_adams_3.jpg 41138 5 
4 Cindy Crawford 4 victoria_adams_4.jpg 58581 4 
4 Cindy Margolis 4 victoria_adams_4.jpg 58581 4 
5 Cindy Crawford 5 victoria_adams_5.jpg 52070 5 
5 Cindy Margolis 5 victoria_adams_5.jpg 52070 5 
6 Cindy Crawford 6 victoria_adams_6.jpg 95586 7 
6 Cindy Margolis 6 victoria_adams_6.jpg 95586 7 
7 Cindy Crawford 7 victoria_adams_7.jpg 37836 3 
7 Cindy Margolis 7 victoria_adams_7.jpg 37836 3 
8 Cindy Crawford 8 victoria_adams_8.jpg 20356 3 
8 Cindy Margolis 8 victoria_adams_8.jpg 20356 3 
9 Cindy Crawford 9 victoria_adams_9.jpg 42856 5 
9 Cindy Margolis 9 victoria_adams_9.jpg 42856 5 
10 Cindy Crawford 10 victoria_adams_10.jpg 15376 4 
10 Cindy Margolis 10 victoria_adams_10.jpg 15376 4 
11 Cindy Crawford 11 victoria_adams_0.jpg 26752 3 
11 Cindy Margolis 11 victoria_adams_0.jpg 26752 3 
12 Cindy Crawford 12 adriana_sklenarikova_1.jpg 129662 2 
12 Cindy Margolis 12 adriana_sklenarikova_1.jpg 129662 2 
13 Cindy Crawford 13 adriana_sklenarikova_2.jpg 129210 0 
13 Cindy Margolis 13 adriana_sklenarikova_2.jpg 129210 0 
14 Cindy Crawford 14 adriana_sklenarikova_3.jpg 128437 0 
14 Cindy Margolis 14 adriana_sklenarikova_3.jpg 128437 0 
15 Cindy Crawford 15 adriana_sklenarikova_4.jpg 124720 0 
15 Cindy Margolis 15 adriana_sklenarikova_4.jpg 124720 0

maar die size en gallery namen kloppen niet ;)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Je moet de id's van de ene tabel wel aan die van de andere koppelen, dat gaat niet automagisch

Verwijderd

Topicstarter
Op zondag 28 april 2002 22:43 schreef ACM het volgende:
Je moet de id's van de ene tabel wel aan die van de andere koppelen, dat gaat niet automagisch
:D en idd dat werkte beter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    gallery LIKE '%cindy%' 
AND 
    size > 100000 
AND
     galleryid.id = galleryphoto.galleryid

en als ik zo ga zoeken
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    gallery LIKE '%cindy%' 
AND 
    size > 100000 
AND
     galleryid.id = galleryphoto.galleryid
AND
     views > 1

zegt ie wederom dat views niet kloppen, maar die is wel gedefenieerd :(

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 23:30
Geef je tabellen in query's eens namen

dus

FROM tabelnaam AS t

en gebruik dan in je where:

AND t.veldnaam > 100

zoiets, jij wel begreipt :+

  • HurrI
  • Registratie: Maart 2001
  • Laatst online: 19-06 15:04

HurrI

No fear... I is here

Ok.. ik ook nog maar een keertje:

ook in je WHERE moet je de tabelnamen voor je kolomnamen zetten (of de aliassen van de tabelnamen zoals mn voorganger voorsteld, alhoewel ik daarover denk: het lijkt al lastig genoeg te zijn voor de topicstarter, waarom dan nog een kronkel erbij doen?)

If it's just us, it seems like an awful waste of space


  • Mini-me
  • Registratie: November 1999
  • Niet online
sim-p0l:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT 
    galleryid.id, 
    galleryid.gallery, 
    galleryphoto.id, 
    galleryphoto.photo, 
    galleryphoto.size, 
    galleryphoto.views
from 
    galleryid, 
    galleryphoto 
WHERE 
    galleryid.gallery LIKE '%cindy%' 
AND 
    galleryphoto.size > 100000 
AND
    galleryid.id = galleryphoto.galleryid
AND
    galleryphoto.views > 1

Zo moeilijk kan het toch niet zijn?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 29 april 2002 07:39 schreef ddc het volgende:
Geef je tabellen in query's eens namen
[...]
zoiets, jij wel begreipt :+
Nou, hij misschien. Maar ik niet.
Die tabellen hebben toch al namen :?

Verwijderd

Topicstarter
Ghallo daar is ik weer :+

ik heb nu de volgende search query en die werkt! :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
SELECT
    galleryid.id,
    galleryid.sex,
    galleryid.country,
    galleryid.gallery,
    galleryid.birthdate,
    galleryphoto.id,
    galleryphoto.photo,
    galleryphoto.size,
    galleryphoto.photoX,
    galleryphoto.photoY,
    galleryphoto.views
FROM
    galleryid INNER JOIN galleryphoto ON
    galleryid.id = galleryphoto.galleryid
WHERE
    galleryid.gallery LIKE '%cindy%'
AND
    galleryid.sex = '$sex'
AND
    galleryid.country = '$country'
AND
    galleryid.birthdate = '$birthdate'
AND
    galleryphoto.size > $size
AND
    galleryphoto.photoY > $photoY
AND
    galleryphoto.photoX > $photoX
AND
    galleryphoto.views > $views

nu heb ik een paar vraagjes.

1. kan ik in een option ook < en > als value gebruiken?

2. hoe kan ik deze search query ook gebruiken wanneer er minder dingen zijn ingevoerd... in mijn search zijn de volgende dingen mogelijk
search1 --> firstname/lastname/age[van/naar]/sex/country
search2 --> firstletter (begint de voornaam met... a/b/etc)
search4 --> picture size [atleast/atmax][kb] / pictureimagesize [height/width][atleast/max][pix] / pictureviews [atleast/max][views]

Hoe kan ik dit alles verwerken? moet ik heftige if routines schrijven of hoe? :D
Pagina: 1