Avatar billede stengaard Praktikant
28. november 2005 - 15:26 Der er 5 kommentarer og
1 løsning

kan man udvide dette script til at søge i flere tabler mysql

hvordan for man  dette  script udvidet til at søge i flere tabler  mysql:
   
med tablerne:

fedtfattige
hovedretopskrift
nemmekage
orientalske
pastaopskrifter
vegetar

tablerne er opbygget på den samme måde her er et eksempel:

CREATE TABLE `vegetar` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(100) NOT NULL default '',
  `name` varchar(60) NOT NULL default '',
  `email` varchar(60) NOT NULL default '',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `portioner` varchar(24) NOT NULL default '',
  `ingredienser` text NOT NULL,
  `fremgangsmaade` text NOT NULL,
  `tilbehoer` varchar(255) NOT NULL default '',
  `message` text NOT NULL,
  `parent` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

mit søge script:

    <form action="soeg.php">
<table><tr>
<td>Søgeord:<br><input type="text" name="q">&nbsp;</td>
<td>Sorter efter:<br><select name="sort"><option value="titel">Opskrifter</option><option value="name">Forfatter</option><option value="id">Dato</option></select>&nbsp;</td>
<td>Sortering:<br><select name="order"><option value="desc">Faldende [z-a]</option><option value="asc">Stigende [a-z]</option></select></td>
</tr></table>
<input type="submit" value="Udfør">
</form>

<?php
if (isset($_GET['q'])) {
    echo '<hr>';
    echo '<h2>Resultater af din søgning på: "'.$_GET['q'].'"</h2>';
    include('config.php');
    $q =  $_GET['q'];
    $sort = $_GET['sort'];
    $order = $_GET['order'];
    $query = mysql_query("SELECT id,titel,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%') ORDER BY $sort $order LIMIT $offset,$range") or die(mysql_error());
    if (mysql_num_rows($query) == 0){
        echo 'Ingen resultater af din søgning!<br>';
    } else {
        echo '<table id="list"><tr>';
        echo '<th width="40%">Opskrifter</th><th width="30%">Forfatter</th><th width="30%">Dato</th><th nowrap>Indlæg</th>';
        echo '</tr>';
        while($row = mysql_fetch_assoc($query)) {
            echo '<tr>';
            echo "<td width='40%'><a href='laes.php?id=$row[id]'>$row[titel]</a></b></td>";
            echo '<td width="30%">'.$row['name'].'</td>';
            echo '<td width="30%">'.$row['date'].'</td>';
            echo '<td nowrap>'.mysql_result(mysql_query("SELECT COUNT(*) FROM opskrift WHERE parent=$row[id]"),0).'</td>';
            echo '</tr>';
        }
        echo '</table>';
    }
    echo '<br>';

    $antal = mysql_result(mysql_query("SELECT COUNT(*) FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%')"),0);
    if ($offset >= $range) {
        $forrige = $offset-$range;
        echo "<a href='?q=$q&sort=$sort&order=$order&offset=$forrige'>Forrige</a> | ";
    } else {
        echo 'Forrige | ';
    }
    if ($antal > $offset+$range) {
        $naeste = $offset+$range;
        echo "<a href='?q=$q&sort=$sort&order=$order&offset=$naeste'>Næste</a>";
    } else {
        echo 'Næste';
    }
}
?>


skal man bare sætte dem ind i denne linie eller er det ikke nok:

$query = mysql_query("SELECT id,titel,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%') ORDER BY $sort $order LIMIT $offset,$range") or die(mysql_error());

og denne her:

echo '<td nowrap>'.mysql_result(mysql_query("SELECT COUNT(*) FROM opskrift WHERE parent=$row[id]"),0).'</td>';
           

og denne her:

$antal = mysql_result(mysql_query("SELECT COUNT(*) FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%')"),0);
   

og congig.php

<?php
/* indstillinger : database */
$mysql['host'] = 'localhost'; // Host til database
$mysql['username'] = 'Brugernavn '; // Brugernavn til database
$mysql['password'] = 'Kodeord '; // Kodeord til database
$mysql['database'] = 'Database'; // Database

/* indstillinger : side */
$range = 4; // Antal resultater pr. side

/* redigering ikke nødvendig herunder */
$offset = isset($_GET['offset']) ? $_GET['offset'] : 0;

mysql_connect($mysql['host'],$mysql['username'],$mysql['password']);
mysql_select_db($mysql['database']);
?>
Avatar billede Slettet bruger
28. november 2005 - 15:53 #1
Den absolut letteste løsning ville være at samle dem til en enkelt tabel med at felt til at angive hvilken type, der er tale om.
Avatar billede nizo Nybegynder
28. november 2005 - 16:31 #2
Man kan have flere forespørgsler i én string ved hjælp af UNION. fx:

mysql_query("SELECT id,titel,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%') ORDER BY $sort $order LIMIT $offset,$range UNION SELECT * FROM table WHERE...") or die(mysql_error());
Avatar billede nizo Nybegynder
28. november 2005 - 16:34 #3
UNION ALL virker bedre, men hvis du skal gøre det paa den maade, skal felterne i table'sne have samme navn.
Avatar billede nizo Nybegynder
28. november 2005 - 16:35 #4
ELLER du kan bruge JOIN funktionen: http://www.w3schools.com/sql/sql_join.asp
Avatar billede stengaard Praktikant
28. november 2005 - 17:03 #5
alle tablerne har de samme navne felter

eksempel:

CREATE TABLE `vegetar` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(100) NOT NULL default '',
  `name` varchar(60) NOT NULL default '',
  `email` varchar(60) NOT NULL default '',
  `date` datetime NOT NULL default '0000-00-00 00:00:00',
  `portioner` varchar(24) NOT NULL default '',
  `ingredienser` text NOT NULL,
  `fremgangsmaade` text NOT NULL,
  `tilbehoer` varchar(255) NOT NULL default '',
  `message` text NOT NULL,
  `parent` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=10 ;

i denne linie

skal man så have alle tablerne skrevet ind (fedtfattige, hovedretopskrift, nemmekage,orientalske, pastaopskrifter, vegetar)


mysql_query("SELECT id,titel,name,DATE_FORMAT(date,'%e/%c-%y %T') AS date FROM opskrift WHERE parent=0 AND (titel LIKE '%$q%' OR message LIKE '%$q%') ORDER BY $sort $order LIMIT $offset,$range UNION SELECT * FROM table WHERE...") or die(mysql_error());
Avatar billede stengaard Praktikant
01. december 2005 - 10:48 #6
lukket
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