[php] Subquery maken?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • fly
  • Registratie: Oktober 2000
  • Laatst online: 23-05 11:04

fly

Live Is Just.........

Topicstarter
Mijn scriptje...
PHP:
1
2
3
4
5
6
7
8
9
10
if($_GET['zoeknaam']) {
     $_GET['zoeknaam'] = preg_replace('/\*/','%',$_GET['zoeknaam']);
     $_GET['zoeknaam'] = preg_replace('/\?/','_',$_GET['zoeknaam']);
     $resultaattype2 = mysql_query("SELECT count(*) FROM movie 
WHERE naam LIKE '".$_GET['zoeknaam']."%'") or die(mysql_error());
    $totalrecords =  mysql_result($resultaattype2, 0, 'count(*)');
     $resultaattype = mysql_query("SELECT * FROM movie 
WHERE naam LIKE '".$_GET['zoeknaam']."%' ORDER BY movies ASC
 LIMIT ". $navigation['startpoint'] . ", " . $navigation['endpoint']) or die(mysql_error());
    }

probleem:
heb een sql die uitgevoert moet worden nadat een paar andere sql's uitgevoert wordt namelijk:
$resultaattype, die moet dus later uitgevoert worden
want mijn navigatie moet eerst $totalrecords krijgen
en dan pas komen de $navigation waardes.

Nu had iemand tegen me gezegt dat ik dan de resultaattype2 beter kan omzetten naar een subquery zodat ik wel $totalrecords eerst krijgt waardoor $resultaattype kan werken.
alleen die gast heeft me weer doorgestuurt naar mysql documentatie... en ik zit nu al 2 uur te lezen en het proberen te begrijpen
en nog steeds weet ik eigenlijk niet wat ik moet doen.. hoe ik het moet aanpakken dus als iemand mij ff wilt bijsturen in de zin van hoe moeten mijn lines worden. zou echt geweldig zijn.

[ Voor 11% gewijzigd door fly op 05-06-2004 21:26 ]


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
PHP:
1
mysql_query(""SELE

Daar gaat het al fout :p

Acties:
  • 0 Henk 'm!

  • fly
  • Registratie: Oktober 2000
  • Laatst online: 23-05 11:04

fly

Live Is Just.........

Topicstarter
PrisonerOfPain schreef op 05 juni 2004 @ 21:25:
PHP:
1
mysql_query(""SELE

Daar gaat het al fout :p
typo foutje...

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Welke versie van MySQL gebruik je?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Subqueries worden in MySQL pas gesupport vanaf versie 4.1. Als je die versie niet draait kun je dat verhaal rondom de subqueries alweer inpakken.
Daarnaast lijk het me alles behalve praktisch om een subquery te gebruiken bij dit voorbeeld. Wat geeft de subquery door aan de oorspronkelijk query?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • fly
  • Registratie: Oktober 2000
  • Laatst online: 23-05 11:04

fly

Live Is Just.........

Topicstarter
Aha... draai idd nog niet 4.1
die gast brengt me gewoon op de verkeerde spoor :(

weet iemand hoe dit dit dan wel kan oplossen?

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
fly schreef op 05 juni 2004 @ 21:24:

probleem:
heb een sql die uitgevoert moet worden nadat een paar andere sql's uitgevoert wordt namelijk:
$resultaattype, die moet dus later uitgevoert worden
want mijn navigatie moet eerst $totalrecords krijgen
en dan pas komen de $navigation waardes.
Waarom moet dit?
Kun je iets meer uitleg geven?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • fly
  • Registratie: Oktober 2000
  • Laatst online: 23-05 11:04

fly

Live Is Just.........

Topicstarter
Alex de Groot schreef op 05 juni 2004 @ 21:42:
[...]


Waarom moet dit?
Kun je iets meer uitleg geven?
Ok het hoofdsql:
$resultaattype = mysql_query("SELECT * FROM movie
WHERE naam LIKE '".$_GET['zoeknaam']."%' ORDER BY movies ASC
LIMIT ". $navigation['startpoint'] . ", " . $navigation['endpoint']) or die(mysql_error());
}
$navigation['startpoint'] en $navigation['endpoint']
worden bepaalt door een functie en die functie heeft weer $totalrecords nodig om die vars te berekenen...

Acties:
  • 0 Henk 'm!

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 20-08 21:38
Al ooit gedacht om het startpoint en de grootte van de lijst via de url mee te geven?

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Waarschijnlijk geen oplossing voor je probleem, denk ik zo, maar wel iets waar je even naar moet kijken. Limit werkt als volgt:

[LIMIT [offset,] row_count | row_count OFFSET offset]

Dus je moet geen start en eindpunt opgeven.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Als ik de code bekijk en wat je er bij verteld geloof ik dat je wilt bereiken een aantal resultaten te laten zien en daarna de juiste links weer te geven (volgende x aantal resultaten)...

Onderstaande code (weet niet of ie werkt, geen zin om te testen) zou dit ongeveer moeten bewerkstelligen, als er bugs in zitten is dat goed voor het leerproces ;)
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
// Functie van php.net
function drawtable( $qr )
{
    // $qr = results of a mysql_query
    $rows      = mysql_num_rows($qr);
    $toreturn  = "<table border=\"1\">\n";
    $toreturn .= "<tr>\n";

    for ($i=0; $i<mysql_num_fields($qr); $i++)
    {
        $toreturn .= "\t<th>".mysql_field_name($qr,$i)."</th>\n";
    }
    $toreturn .= "</tr>\n";

    for ($i=0; $i<$rows; $i++)
    {
        $row       = mysql_fetch_row($qr);
        $cols      = sizeof($row);
        $toreturn .= "<tr>\n";
        for ($x=0; $x < $cols; $x++)
        {
            if ($row[$x]==NULL)
            {
                $row[$x]='&nbsp;';
            }
            $toreturn .= "\t<td>$row[$x]</td>\n";
        }
        $toreturn .= "</tr>\n";
    }
        $toreturn .= '</table>';
        return $toreturn;
}

if ( $_GET['zoeknaam'] )
{
    // aanpassen van de zoekstring
    $_GET['zoeknaam'] = preg_replace( '/\*/','%', $_GET['zoeknaam'] );
    $_GET['zoeknaam'] = preg_replace( '/\?/','_', $_GET['zoeknaam'] );

    // Nu het totaal aantal rijen krijgen om
    $resultaattype2   = mysql_query( "SELECT   count(*) as totalrecords
                                      FROM     movie
                                      WHERE    naam LIKE '{$_GET['zoeknaam']}%'" )
                        or die( mysql_error() );
    $totalrecords     = mysql_result( $resultaattype2, 0, 'totalrecords' );

    echo '<br>Totaal aantal resultaten: ' . $totalrecords;

    if ( isset( $_GET['NewStartpoint'] ) )
        if ( ( is_numeric( $_GET['NewStartpoint'] ) )
        and  ( $_GET['NewStartpoint'] > 0 )
        and  ( $_GET['NewStartpoint'] <= $totalrecords ) )
            $navigation['startpoint'] = $_GET['NewStartpoint'];
        else
            $navigation['startpoint'] = 0;
    else
        $navigation['startpoint'] = 0;

    $navigation['records']    = 3;             // 10 resultaten per keer

    $resultaattype    = mysql_query( "SELECT   *
                                      FROM     movie
                                      WHERE    naam LIKE '{$_GET['zoeknaam']}%'
                                      ORDER BY movies ASC
                                      LIMIT    {$navigation['startpoint']}
                                      ,        {$navigation['records']}" )
                        or die( mysql_error() );

    // Resultaat laten zien, 10 films die aan de criteria voldeden...
    echo drawtable( $resultaattype );

    // Nu datgene wat ik denk dat jij wil doen,
    // maar waarvoor een subquery niet nodig is:
    if ( ( $navigation['startpoint']
         + $navigation['records'] )
         >= $totalrecords )
    {
        // Als er geen volgende resultaten zijn:
        echo '<br>Geen link naar de volgende set resultaten';
    }
    else
    {
        // Link start
        echo "<a href=\"{$_SERVER['PHP_SELF']}"
           . "?zoeknaam={$_GET['zoeknaam']}&NewStartpoint="
           . ($navigation['startpoint'] + $navigation['records']) . "\">";

        // Link tekst
        if ( ( $navigation['startpoint']
             + $navigation['records']
               * 2 )
             <= $totalrecords )
        {
            // Er zijn nog 10 volgende resultaten tekst
            echo "Link naar volgende {$navigation['records']} resultaten";
        }
        else
        {
            // Er zijn geen 10 volgende resultaten meer
            $iRecordsLeft  = ( $navigation['startpoint']
                         + $navigation['records'] )
                       - $totalrecords;
            echo "Link naar de laatste {$iRecordsLeft} resultaten";
        }

        // Link einde
        echo "</a>";
    }
}
?>


edit:
Ik heb de code getest en gedebugged, nu werkt ie wel, op het connecten na, maar ik neem aan dat je weet hoe dat moet, anders was je niet zo ver gekomen

[ Voor 173% gewijzigd door Verwijderd op 06-06-2004 11:16 . Reden: code was nogal breed, ik heb de associatie dmv newlines en spaties anders geregeld om de regels korter te maken ]


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Waarom haal je de totale aantallen niet gewoon uit je MySQL result resource met mysql_num_rows of snap ik het niet 8)7

Acties:
  • 0 Henk 'm!

  • fly
  • Registratie: Oktober 2000
  • Laatst online: 23-05 11:04

fly

Live Is Just.........

Topicstarter
Tnx allemaal voor jullie oplossingen.
ik had het uiteindelijk op een andere manier gedaan
met de maker van die functie beetje overlegt enzo en toen na een nachtje slapen op de simpele oplossing komen van eerste andere scripts uitlaten voeren en dan pas weer een andere script....
voor meer info:
http://www.phpfreakz.nl/f...rum=4&iid=432161#id432360

nogmaars TNX... topic mag dicht

Acties:
  • 0 Henk 'm!

Verwijderd

Skaah schreef op 06 juni 2004 @ 14:00:
Waarom haal je de totale aantallen niet gewoon uit je MySQL result resource met mysql_num_rows of snap ik het niet 8)7
Als je het tegen mij had, dan weet ik wel waarom:
Query1: Daarmee haal ik 1 rij, 1 cel uit de database. en als ik een num_rows doe dan moet ik dus ook de hele database leeg halen, tenminste, 1 kolom dan. Dat zou inefficienter zijn

Query 2: daar zit een limit op, dus daarvan krijg ik nooit het goede aantal...
fly schreef op 06 juni 2004 @ 14:25:
Tnx allemaal voor jullie oplossingen.
ik had het uiteindelijk op een andere manier gedaan
met de maker van die functie beetje overlegt enzo en toen na een nachtje slapen op de simpele oplossing komen van eerste andere scripts uitlaten voeren en dan pas weer een andere script....
voor meer info:
http://www.phpfreakz.nl/f...rum=4&iid=432161#id432360

nogmaars TNX... topic mag dicht
Ik snap het probleem en de oplossing dus nog steeds niet, volgende keer duidelijk zijn aub

[ Voor 34% gewijzigd door Verwijderd op 07-06-2004 11:08 ]

Pagina: 1