Avatar billede kane Juniormester
05. juni 2004 - 01:02 Der er 64 kommentarer og
1 løsning

søg i flere tabeller

jeg har denne linie og den virker fint

  $result=mysql_query("select navn, pris, year from Bordeaux where navn like '%$_POST[search]%' OR pris like '%$_POST[search]%'" );


Men nu vil jeg gerne have den søger i flere tabeller.

  $result=mysql_query("select navn, pris, year from Bordeaux, Languedoc where navn like '%$_POST[search]%' OR pris like '%$_POST[search]%'" );

hvor Languedoc er kommet på, men så fejler den??
Avatar billede dennismp Nybegynder
05. juni 2004 - 01:05 #1
Hvilke felter har de to tabeller?
Avatar billede dennismp Nybegynder
05. juni 2004 - 01:09 #2
og ret din mysq_query til:
$result=mysql_query("select navn, pris, year from Bordeaux, Languedoc where navn like '%$_POST[search]%' OR pris like '%$_POST[search]%'") or die(mysql_error());

hvilken fejl kommer der?
Avatar billede lauer Nybegynder
05. juni 2004 - 01:20 #3
Kunne det evt. være fordi at tabelnavnene hedder det samme?
Det vil være meget nemmere at sige, hvis du viser os den fejl som du får ved en udskrivning af mysql_error(), som Dennismp skriver.
Avatar billede dennismp Nybegynder
05. juni 2004 - 01:25 #4
lauer: det tror jeg også det er :-)

.. Men hvis det er, så ville jeg nok foreslå at slå de to tabeller sammen, hvis det er alligevel det samme de beskriver. (vine?)
Avatar billede kane Juniormester
05. juni 2004 - 09:42 #5
http://www.eksperten.dk/spm/503345

Jeg har ikke kunne finde ud af og slå det hele sammen til en tabel.

Jeg kan ikke finde ud hvordan nogle typer skal passe sammen med de rigtige vine, plus at nogle af dem har undernavne.

her er fejlen

Column: 'navn' in field list is ambiguous
Avatar billede kane Juniormester
05. juni 2004 - 10:09 #6
men det ville nu være lækkert at få det hele i en tabel, da dem der har siden, selv kunne tilføje nye vine (online)
Avatar billede dennismp Nybegynder
05. juni 2004 - 14:01 #7
Hvilke felter indeholder de to tabeller?
Avatar billede dennismp Nybegynder
05. juni 2004 - 14:03 #8
Problemet er lige pt, at mysql kan ikke finde ud af om du mener "navn" fra den ene eller anden tabel. Men hvis vi skal slå dem sammen så kommer du uden om det problem.

Har du phpMyAdmin?
Avatar billede kane Juniormester
05. juni 2004 - 21:49 #9
de indeholder det samme, Id, navn, pris, link, year og beskrivelse.

Og ja, jeg har phpMyAdmin
Avatar billede kane Juniormester
05. juni 2004 - 22:09 #10
og jeg er frisk på at slå dem sammen, men jeg er altså langt fra en haj.
Jeg sætter gerne point op til 200 og du kan få de andre 200 fra det andet spørgsmål hvis du gerne vil have dem.
Avatar billede dennismp Nybegynder
05. juni 2004 - 22:12 #11
Lav en backup af de to tabeller. MEGET vigtig :)

Rename den ene tabel, lad os sige Bordeaux til fx. "vine"

tilføj en kolonne med sql'en:
ALTER TABLE vine ADD type enum('Bordeaux','Languedoc') default 'Bordeaux';

Nu skal vi bare flytte data fra Languedoc til vine.

INSERT INTO vine(navn,pris,link,year,beskrivelse,type)
SELECT navn,pris,link,year,beskrivelse,'Languedoc'
FROM Languedoc;

og nu kan du så slette Languedoc tabellen.

.. Hvis du får problemer, så skriv hvad fejlen er..
Avatar billede kane Juniormester
06. juni 2004 - 18:02 #12
doh
Avatar billede kane Juniormester
06. juni 2004 - 18:03 #13
jeg kan ikke ændre den, da db'en bliver brugt. Så jeg laver en ny, men hvad bliver denne lini brugt til ALTER TABLE vine ADD type enum('Bordeaux','Languedoc') default 'Bordeaux';?
Avatar billede dennismp Nybegynder
06. juni 2004 - 18:10 #14
Ah. Skidt :)

Hvilken version af mysql bruger du egentlig?

"ATLER TABLE ..." ændre på tabellen vine hvor den tilføjer en ny kolonne (der hedder type) som kan have to værdier; Bordeaux eller Languedoc.. Den defaulter til Bordeaux.
Avatar billede kane Juniormester
06. juni 2004 - 19:32 #15
hvorfor skal den være default bordeaux?

jeg har jo op til 100 typer vin plus et par subtyper
Avatar billede dennismp Nybegynder
06. juni 2004 - 19:36 #16
Det behøver heller ikke have en default. Du kan sætte den til hvad det nu skulle være - eller fjerne "default 'Bordeaux'" helt - så den ikke har en default.
Avatar billede kane Juniormester
06. juni 2004 - 19:42 #17
skal det være enum?.....hvad er enum?

Fejl

SQL-forespørgsel : 

ALTER TABLE `vine` ADD `type` ENUM NOT NULL ,
ADD `subtype` ENUM NOT NULL

MySQL returnerede:


#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL, ADD `subtype` ENUM NOT NULL' at line 1
Avatar billede dennismp Nybegynder
06. juni 2004 - 19:56 #18
Enum er en felt der kun kan indeholder hvad du angiver.

ENUM('værdi1','værdi2')

altså værdi1 eller værdi2.

Men når du siger at du har 100+ vine så ville det være bøvlet. Så ville jeg nok lave en tabel der hed vintype (id og navn) og så i vine have et vin_type_id..

fx

vin_type:
  id=1 navn=Bordeaux
  id=2 navn=Languedoc

og så i vine har du så
  id=1 navn='Viné de smagergodt', pris=200 ... vin_type_id=1


Det kræver så at vine får et ekstra felt:
ALTER TABLE `vine` ADD `vin_type_id` INT NOT NULL;

når du så skal vise vinenene så skrive du select i stil med
SELECT vt.navn, v.*
FROM vine_type vt, vine v
WHERE vt.id = v.vin_type_id;
Avatar billede kane Juniormester
06. juni 2004 - 20:51 #19
ummm mine beskeder bliver ikke gemt. nå

jeg er i gang.

hvordan laver man et værdi om i et felt......skal ændre 0 til 4 i mange felter
Avatar billede dennismp Nybegynder
06. juni 2004 - 20:59 #20
UPDATE tablenavn SET feltnavn=4 WHERE feltnavn=0;
Avatar billede kane Juniormester
06. juni 2004 - 22:27 #21
http://rungstedvin.dk/sortimentTest.php

Så er lidt af den klar, jeg har brugt din sql
SELECT vt.navn, v.*
FROM vine_type vt, vine v
WHERE vt.id = v.vin_type_id;

Men jeg skal jo bruge typer af vin over de rigtige vin.

som her
http://rungstedvin.dk/sortiment.php
Avatar billede kane Juniormester
06. juni 2004 - 22:28 #22
sådan ser den sql ud

$query = mysql_query("SELECT vt.navn, v.*
FROM vintype vt, vine v
WHERE vt.id = v.vin_type_id;")or die(mysql_error());
while($row = mysql_fetch_array($query))  {
Avatar billede dennismp Nybegynder
06. juni 2004 - 22:51 #23
har alle vine et vin_type_id som findes i vintype tabellen?
Avatar billede kane Juniormester
06. juni 2004 - 23:00 #24
ja

der er 1, 2, 3, 4, 5 og 6 i pt (der er dog ingen vine på listen med Id 2 og 3 endnu)
Avatar billede dennismp Nybegynder
06. juni 2004 - 23:09 #25
Hvis du smider sql'en ind i phpmyadmin, for du så samme antal rækker i resultatet?
Avatar billede kane Juniormester
06. juni 2004 - 23:12 #26
jeg ser de samme som på sortimentTest.php
Avatar billede dennismp Nybegynder
06. juni 2004 - 23:26 #27
Ah jeg tror jeg misforstod spørgsmålet.

SELECT vt.navn as vintype, v.*
FROM vintype vt, vine v
WHERE vt.id = v.vin_type_id;

nu burde du kunne skrive $row['vintype'] for at få Bordeaux og de andre ud.
Avatar billede kane Juniormester
06. juni 2004 - 23:51 #28
Unknown column 'vt.navn' in 'field list'

er det forkortelser du selv skriver eller ?.....vt.navn........vintype vt

hvad er de for nogle
Avatar billede kane Juniormester
07. juni 2004 - 00:06 #29
i tabel vintype har jeg Id og vintype

i tabel vine har jeg Id, navn, pris, year, link, beskrivelse og vin_type_id
Avatar billede dennismp Nybegynder
07. juni 2004 - 00:22 #30
først forkortelserne.

hvis du skriver

FROM vin v

så kan du bruge v istedet for vin. Det kan være ganske praktisk - jeg bruger det tit. Fx istedet for at skrive vin.id så kan man skrive v.id.

Du burde kunne skrive:

SELECT vt.*, v.*
FROM vintype vt, vine v
WHERE vt.id = v.vin_type_id;

Hvis du stadig har problemer - kan jeg så se selve while()-løkken (den der printer dem ud)
Avatar billede kane Juniormester
07. juni 2004 - 06:44 #31
Avatar billede kane Juniormester
07. juni 2004 - 06:45 #32
der fik du mig........while() løkken?

while($row = mysql_fetch_array($query))  {

denne her?
Avatar billede dennismp Nybegynder
07. juni 2004 - 12:06 #33
ja
Avatar billede kane Juniormester
07. juni 2004 - 13:59 #34
og er den ok ?

Den skriver som du kan se stadigvæk ikke selve typen ud.

Vil du se noget mere?..koden...phpmyadmin?
Avatar billede dennismp Nybegynder
07. juni 2004 - 14:16 #35
jeg vil gerne se koden (gerne den while-løkke som printer rækkerne ud til websiden) - jeg går ud fra at du ikke har rettet i sql'en udover det vi har snakket om her.
Avatar billede kane Juniormester
07. juni 2004 - 16:28 #36
ja, jeg er dog ikke sikker på hvad du mener med den while()

Jeg har bare skrevet <?php echo $row["navn"]; ?>

Men her kommer den.

<table width="100%"  border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td width="70%" class="sortimentHead" scope="col"> <strong>Her skal type være<?php echo $row["vintype"]; ?></strong></td>
            <td width="20%" class="sortimentHead" scope="col"><strong>&Aring;rgang</strong></td>
            <td class="sortimentHead" scope="col"><strong>Pris</strong></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr> <?
//require_once("class.php");
//dhost::dbConn("rungstedvin_dk");
$query = mysql_query("SELECT vt.*, v.*
FROM vintype vt, vine v
WHERE vt.id = v.vin_type_id;
")or die(mysql_error());
while($row = mysql_fetch_array($query))  {

?>       
          <tr>
            <td class="sortiment"><?php echo $row["navn"]; ?>
    </td>
            <td class="sortiment"><?php echo $row["year"]; ?></td>
            <td class="sortiment"><?php echo $row["pris"]; ?>,-</td>
          </tr><?}?>
         
          <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
          </tr>     
        </table>
Avatar billede kane Juniormester
08. juni 2004 - 08:46 #37
jeg har klaret resten.
Hvis du gider og smide et svar, så du kan få nogle point.
Avatar billede dennismp Nybegynder
08. juni 2004 - 10:21 #38
Joda. Du spørger bare hvis der er behov for det.
Avatar billede kane Juniormester
10. juni 2004 - 23:06 #39
tilbage til det, det hele drejet sig om........søgning.

jeg har nu 2 tabeller, den ene med vin typer, og den anden med vine.

jeg har lavet en søgning som virker fint med navne. MEN jeg ville jo gerne kunne søge på typer og de så alle (under den type) blev listet på siden.

Denne her virker fint med navne og pris.

$result=mysql_query("select navn, pris, year from vine where navn like '%$_POST[search]%' OR pris like '%$_POST[search]%' " ) or die(mysql_error());;
  if(mysql_num_rows($result)>0){
    while ($res=mysql_fetch_array($result)){
    ?>

lidt ned kommer
<tr>
            <td class="sortiment"><?php echo $res["navn"]; ?>
    </td>
            <td class="sortiment"><?php echo $res["year"]; ?></td>
            <td class="sortiment"><?php echo $res["pris"]; ?>,-</td>
          </tr><?}?>

Nu ville jeg så gerne have at hvis man søger på Alsace, så kom alle de vine der har Alsace's ID nummer frem på siden.

Noget du kan klare?
Avatar billede kane Juniormester
10. juni 2004 - 23:07 #40
tabel hedder vintype og rækken hedder vin_type_id
Avatar billede dennismp Nybegynder
10. juni 2004 - 23:21 #41
Et eksempel er vist nemmest :)

SELECT v.navn, v.pris, v.year
FROM vine v, vine_type vt
WHERE v.vin_type_id = vt.id
AND vt.navn = 'Bordeaux'
AND (v.navn LIKE '%$_POST[search]%' OR v.pris LIKE '%$_POST[search]%')
Avatar billede kane Juniormester
10. juni 2004 - 23:44 #42
Rettet lidt til, men den viser intet hvis man søger på typer.

SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = 'Bordeaux'
AND (v.navn LIKE '%$_POST[search]%' OR v.pris LIKE '%$_POST[search]%')
Avatar billede dennismp Nybegynder
10. juni 2004 - 23:49 #43
Prøv bare med:
SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = 'Bordeaux'

i phpmyadmin.. Nu burde den vise alle vine med type Bordeaux.
Avatar billede kane Juniormester
10. juni 2004 - 23:50 #44
yup.......den er god nok
Avatar billede dennismp Nybegynder
10. juni 2004 - 23:55 #45
AND (v.navn LIKE '%a%' OR v.pris LIKE '%a%')

prøv at tilføje det.. nu burde den da vise en del række (hvis ikke alle).. Hvis det virker, så prøv at skrive en realistisk søgeord.. stadig phpmyadmin
Avatar billede kane Juniormester
10. juni 2004 - 23:58 #46
den viser det samme
Avatar billede dennismp Nybegynder
11. juni 2004 - 00:30 #47
så burde dette jo også virke... så fremt den kan finde nogle vine:

AND (v.navn LIKE '%$_POST[search]%' OR v.pris LIKE '%$_POST[search]%')
Avatar billede kane Juniormester
11. juni 2004 - 00:49 #48
Den viser ikke nogle

http://rungstedvin.dk/index.php

Prøv selv at søg på Alsace feks

http://rungstedvin.dk/sortiment.php

her kan du se at der er vin under alsace


<?
  $result=mysql_query("SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = 'Bordeaux'
AND (v.navn LIKE '%$_POST[search]%' OR v.pris LIKE '%$_POST[search]%') " ) or die(mysql_error());;
if(mysql_num_rows($result)>0){
    while ($res=mysql_fetch_array($result)){
   
    ?>   
           
          <tr>
            <td class="sortiment"><?php echo $res["navn"]; ?>
    </td>
            <td class="sortiment"><?php echo $res["year"]; ?></td>
            <td class="sortiment"><?php echo $res["pris"]; ?>,-</td>
          </tr><?}?>
Avatar billede dennismp Nybegynder
11. juni 2004 - 07:51 #49
Ah. Nu tror jeg ved hvad du vil og hvad der går galt :)... Jeg har også

$search = $_POST['search']; // brug addslashes() hvis der er behov for det

$result=mysql_query("SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = '$search'
AND (v.navn LIKE '%$search%' OR v.pris LIKE '%$search%') " ) or die(mysql_error());

AND vt.vin_type = '$search'
  kan du evt lave om til
AND vt.vin_type LIKE '%$search%'
Avatar billede kane Juniormester
11. juni 2004 - 15:41 #50
hmmm

har prøvet begge 2.....den første kommer der ingen vin frem ved søgning på en type (feks alsace)

Den næste kommer alle vin frem, selv dem der ikke er fra alsace
Avatar billede kane Juniormester
11. juni 2004 - 15:42 #51
umm den første sætning du skriver med

Jeg har også

$search = $_POST['search']; // brug addslashes() hvis der er behov for det

-------------------------------------------------------------------------------------
Den er jeg altså ikke helt med på ?
Avatar billede dennismp Nybegynder
11. juni 2004 - 17:28 #52
hvis du prøver at søge på "' og så se om du får en sql fejl. Hvis du gør, skal du bruge $search = addslashes($_POST['search']); .. hvis ikke, så er din php konfigureret til at gøre dette for dig.

engang at indsætte rette koden til:
$result=mysql_query($sql="SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = '$search'
AND (v.navn LIKE '%$search%' OR v.pris LIKE '%$search%') " ) or die(mysql_error());
print "SQL: $sql<br>";

prøv så at søge igen og skrive det SQL her, så vi kan se hvordan sql'en ser ud.
Avatar billede kane Juniormester
11. juni 2004 - 18:30 #53
SQL: SELECT v.navn, v.pris, v.year FROM vine v, vintype vt WHERE v.vin_type_id = vt.Id AND vt.vin_type = '' AND (v.navn LIKE '%%' OR v.pris LIKE '%%')
Avatar billede dennismp Nybegynder
11. juni 2004 - 19:20 #54
Hmm underligt, $search er tom..

Den for du submitter fra er det med POST ?

ellers kan du jo prøve at erstatte $_POST['search'] med $_REQUEST['search'];
Avatar billede kane Juniormester
11. juni 2004 - 19:46 #55
<form method="POST" action="Resultat.php">
        <p><span class="text">S&oslash;g Vin</span> <br>
        <input name="search" type="text" class="search" size="16"><br>
        <input name="B1" type="submit" class="search" value="Send">
        </p>
      </form>
Avatar billede dennismp Nybegynder
11. juni 2004 - 19:59 #56
Det ser jo rigtig nok ud.. Så burde værdien jo også komme over i din sql. Gør du andet ved $search / $_POST['search'] end det jeg lige har forslået.
Avatar billede kane Juniormester
11. juni 2004 - 20:14 #57
start af kode

<?php
session_start();
require_once("class.php");
dhost::dbConn("rungstedvin_dk");
?>

lidt nede

  <?  if(isset($_POST['search'])){?>

lidt nede

<?
$result=mysql_query($sql="SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND vt.vin_type = '$search'
AND (v.navn LIKE '%$search%' OR v.pris LIKE '%$search%') " ) or die(mysql_error());
print "SQL: $sql<br>";

if(mysql_num_rows($result)>0){
    while ($res=mysql_fetch_array($result)){
   
    ?>   
           
          <tr>
            <td class="sortiment"><?php echo $res["navn"]; ?>
    </td>
            <td class="sortiment"><?php echo $res["year"]; ?></td>
            <td class="sortiment"><?php echo $res["pris"]; ?>,-</td>
          </tr><?}?>


slut

  <?
    }
}
  ?>


og formen er som du så før

har du messenger?
Avatar billede dennismp Nybegynder
11. juni 2004 - 20:30 #58
har du ikke en $search = $_POST['search'] et sted før mysql_query() ?
Avatar billede kane Juniormester
11. juni 2004 - 20:34 #59
nej
jeg har denne her

          <?  if(isset($_POST['search'])){?>
Avatar billede dennismp Nybegynder
11. juni 2004 - 20:42 #60
aha!  :-)

tilføj:
$search = $_POST['search'];

et sted før du kalder mysql_query(.. evt lige over.

msn: ytrewq123456@hotmail.com
Avatar billede kane Juniormester
11. juni 2004 - 20:49 #61
søger på alsace og får dette

SQL: SELECT v.navn, v.pris, v.year FROM vine v, vintype vt WHERE v.vin_type_id = vt.Id AND vt.vin_type = 'alsace' AND (v.navn LIKE '%alsace%' OR v.pris LIKE '%alsace%')
Avatar billede dennismp Nybegynder
11. juni 2004 - 20:57 #62
ret til:
$result=mysql_query($sql="SELECT v.navn, v.pris, v.year
FROM vine v, vintype vt
WHERE v.vin_type_id = vt.Id
AND (vt.vin_type = '$search'
OR (v.navn LIKE '%$search%' OR v.pris LIKE '%$search%')) " ) or die(mysql_error());

så burde den være der..
Avatar billede kane Juniormester
11. juni 2004 - 21:12 #63
JJJJAAAAAAAAAAAAAAAAAAAAAAAAAAA
sådan

10000.0000000.000000000 tak
Avatar billede kane Juniormester
11. juni 2004 - 21:12 #64
http://www.eksperten.dk/spm/503345

svar her og du får flere point
Avatar billede kane Juniormester
12. juni 2004 - 23:57 #65
Dennismp

har du/kender noget til en php email liste?
Man skal kunne tilføje/framelde sig og sende email ud til dem der er på en liste.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester