Avatar billede siphon Nybegynder
04. marts 2009 - 09:48 Der er 9 kommentarer og
1 løsning

speciel query - Nybegynder

Hej folkens :D

jeg sidder lige til grundforløbs prøve som web intergrator, så hurtig svar ville bare være alt for FEDT :D..

Mit problem lyder på at jeg vil gerne have en slags ELSE regl som vi kender dem fra IF statements inde i min SQL query.
jeg har ledt rundt på php.net kunne ikke rigtigt finde noget som jeg fandt oplysende på dette punkt :D..

Dette er hvad jeg har forsøgt indtil nu:


$query = sprintf("SELECT * FROM sites, sub_sites WHERE sites.site_name = '%s' OR sub_sites.site_name = '%s'",
mysql_real_escape_string($param),
mysql_real_escape_string($param));

Det jeg for ud af denne query er at alle mine sub_sites rows bliver udvalgt sammen med den ene sites row som nu passer - ELLER omvendt!
Alt efter hvad jeg self sætter $param til.

Håber der er nogle som kan hjælpe mig med en løsning ! ;D

PS: her er ldit et billede af hva der sker når jeg kører queryen: http://testmax.dk/External/File/1000/Billede-1-png.aspx
Avatar billede fennec Nybegynder
04. marts 2009 - 09:55 #1
Ikke helt sikker på hvad du søger, men er det en if/else i selecten så skulle du måske kigge i mySQL manualen i stedet for php :)

http://dev.mysql.com/doc/refman/5.1/en/if-statement.html
Avatar billede Slater Ekspert
04. marts 2009 - 10:01 #2
Næh, jeg forstår heller ikke helt hvad det er du forsøger på.

Kan du evt. forklare lidt bedre hvad du håber at få som resultat?
Avatar billede siphon Nybegynder
04. marts 2009 - 10:17 #3
Fennec - har lige læst lidt på det link du gav mig, og det hjalp ikk meget, hvilket nok skyldes jeg end ikke er en ørn til mysql. Ellers mange tak :D

For at uddybe lidt vil jeg lige forklare hele scenariet:

jeg har bygget en function op (PHP) som henter mine informationer ned fra databasen til den ønskede side. Det sker ved at jeg har sat en $_GET['side']=Forside - eksempel vis. den henter jeg så ned og gemmer under variablen $param.
  Nu vil jeg har jeg så kommet til et punkt hvor jeg er nød til at skal have en undermenu med nye sider i self. De sider bliver så hentet fra mysql tabelen "sub_sites" de andre (hovede)sider bliver hentet fra tabelen "sites".
  jeg kunne så godt tænke mig at min function selv fandt sit match ved at tjekke i begge tabler og returner den row som jeg spørger efter.

----
Min function ser så ledes ud:
function find_site($param)
    {
    db_connect();
    $query = sprintf("SELECT * FROM sites, sub_sites
                        WHERE sites.site_name = '%s' OR  sub_sites.subsite_name = '%s'",
                        mysql_real_escape_string($param),
                        mysql_real_escape_string($param));
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    return $row;
    }
?>
---

Håber det gav et indtryk af hvad mit problem egentlig er :D
Avatar billede siphon Nybegynder
04. marts 2009 - 10:54 #4
Jeg har fundet en midlertidig løsning - tror dog langt fra det er den optimale metode men de virker :D

-----
function find_site($param)
    {
    db_connect();
    $sites_query = sprintf("SELECT * FROM sites
                        WHERE sites.site_name = '%s'",
                        mysql_real_escape_string($param));
    $sites_result = mysql_query($sites_query);
    $sites_row = mysql_fetch_array($sites_result);
   
    $subsites_query = sprintf("SELECT * FROM sub_sites
                        WHERE sub_sites.subsite_name = '%s'",
                        mysql_real_escape_string($param));
    $subsites_result = mysql_query($subsites_query);
    $subsites_row = mysql_fetch_array($subsites_result);
    if ($sites_row['site_name'] != $param)
        {
            $query = $subsites_query;
        }else
        {
            $query = $sites_query;
        }
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    return $row;
    }
---
Avatar billede fennec Nybegynder
04. marts 2009 - 11:34 #5
Hvad så hvis du har en hovedside som hedder det samme som en underside??
Avatar billede siphon Nybegynder
04. marts 2009 - 12:40 #6
Se det giver problemer :D .. men nu er jeg så heldig at min undermenu er med mobil telefon producenter - Så som Nokia osv.

Og min hovede menu er ex - Forside Nyheder Tilbud Mobil FAQ.
Så heldigvis komemr jeg ikke til at kan mærke det i denne sammenhæng, men det rigtigt ja et "hovedelink" og "sublink" må ikke hedde det samme :P

--
Tak for at highlight det lille problem :D
Avatar billede fennec Nybegynder
04. marts 2009 - 12:53 #7
Nu vil jeg sige at jeg stadig ikke er helt afklaret med hvad du har gang i, men jeg vil foreslå en DB struktur ændring. Du skal faktisk kun have EN tabel.

[sites]
ID, parentID, name, data, ...osv...

ID er selvefølgelig primary key.
parentID er en reference til ID (hvis siden er en under side)
Resten af kolonnerne skal bare være som du har dem nu.

Det giver dig en data liste ala dette:
1, NULL, "Forside"
2, NULL, "Nyheder"
3, NULL, "Kontakt"
4, 2, "Nyhed 1"
5, 2, "Nyhed 2"

I stedet for at bruge $_GET['side']=Forside skal det være $_GET['side']=1
Avatar billede siphon Nybegynder
04. marts 2009 - 13:34 #8
ohh ja.. kan godt se hvordan det ville komme til at fungere, og kan også godt se min metode ikke er den bedste, med den nyerhvervet viden :D...

Dog vil jeg holde mig til det jeg kan, da dette er et eksamens proejct og derfor helst ikke vil rode mig ud i alt muligt :D.. Men det er helt sikkert noget jeg skal til at have begået mig ud i. Altså at opstille min database på den måde istedet for min traditionelle opstilling :D..

Vil lige sige mange tak for dine input's, og har som sagt fundet en løsning som fungere til mit project.

--
Siphon out
Avatar billede fennec Nybegynder
04. marts 2009 - 13:59 #9
Siden du selv fandt løsningen, så husk at smide et svar og acceptere det, så spørgsmålet kan blive lukket.

Og held og lykke med eksamen.

.o) <-- One Eyed Jack
Avatar billede siphon Nybegynder
05. marts 2009 - 20:25 #10
opstil en If test i functionen så lede $query er forskellige alt efter dit behov se dette:
function find_site($param)
    {
    db_connect();
    $sites_query = sprintf("SELECT * FROM sites
                        WHERE sites.site_name = '%s'",
                        mysql_real_escape_string($param));
    $sites_result = mysql_query($sites_query);
    $sites_row = mysql_fetch_array($sites_result);
 
    $subsites_query = sprintf("SELECT * FROM sub_sites
                        WHERE sub_sites.subsite_name = '%s'",
                        mysql_real_escape_string($param));
    $subsites_result = mysql_query($subsites_query);
    $subsites_row = mysql_fetch_array($subsites_result);
    if ($sites_row['site_name'] != $param)
        {
            $query = $subsites_query;
        }else
        {
            $query = $sites_query;
        }
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    return $row;
    }
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
Computerworld tilbyder specialiserede kurser i database-management

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