Kom ihåg mig?
Home Menu

Menu


MySQL förfrågan: mysql_query, WHERE-satser

 
Ämnesverktyg Visningsalternativ
Oläst 2007-01-01, 16:57 #1
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Jag har idag bestämt mig för att bygga ut en befintlig webbplats och har problem med MySQL-sortering.

Problemet är följande:
Jag ska välja ut data från en MySQL-tabell ("tabell") enligt följande.
Kod:
$a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)"));
$b = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y-1)"));
...
$y är ett visst angivet sorteringsnummer
"id" är bara ett nummer (som ökar med varje rad just nu)

Detta funkade som det ska, men nu vill jag även sortera datan med ännu ett avseende.

Jag har byggt in en ny kolumn i tabellen som heter "typ".
"typ" kan bara innehålla ett av följande texter: "bil" "hus" eller "bat" (dessa är bara exempel, inget med mitt projekt att göra)

Jag vill att $a ska vara den första raden i tabellen där $typ är "bil" och $b ska vara den andra raden i tabellen där $typ är "bil"
och på samma sätt att
$a ska vara den första raden i tabellen där $typ är "hus" och $b ska vara den andra raden i tabellen där $typ är "hus"
HUR GÖR JAG DETTA?

Sedan kommer jag bygga ut detta med if-satser
if ($typ=="bil")
*{
$a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)"));
$b = ...

*}
elseif ($typ=="hus")
*{
$a = mysql_fetch_row(mysql_query("SELECT link, text FROM tabell WHERE id IN ($y)"));
$b = ...

...
*}

Röd text = fel kod

Jag tror inte jag har förklarat så bra, så fråga om ni inte förstår.

Jag har noll koll på MySQL-funktioner, så skriv gärna så tydligt som möjligt, tack.
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-01, 17:12 #2
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Här är en skiss över hur tabellen ser ut
Bifogade bilder
Filtyp: jpg post-4-1167667954.jpg (42.4 KB, 2 visningar)
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-01, 20:21 #3
Eddie Eddie är inte uppkopplad
Medlem
 
Reg.datum: Jan 2005
Inlägg: 83
Eddie Eddie är inte uppkopplad
Medlem
 
Reg.datum: Jan 2005
Inlägg: 83
$a = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ order by id Limit 1"));
$b = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ and id > ". $a['id'] ." order by id Limit 1"));

Allternativt:

$a = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ order by id desc Limit 1"));
$b = mysql_fetch_row(mysql_query("SELECT id, link, text FROM tabell WHERE typ = $typ and id < ". $a['id'] ." order by id desc Limit 1"));

om du vill ha i omvänd ordning

osv.. något i den stilen borde funka.
Eddie är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-01, 21:29 #4
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
AAh, tack så mycket! Ska prova med detta.
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-02, 11:09 #5
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Select * from tabell where typ='bil' order by id limit 2
Ger de två rader där typ är lika med 'bil' och de två lägsta id-numren i dettta urval.

I din exempel tabell har du sorterat id kolumnen i omvänd ordning. vill du ha det så även i din fråga så skriv ...order by id desc ...

Ett tips: fokusera på att skriva bra frågor i Mysql, är mycket lättare att utgå från väl formaterade data än att försöka rådda till det i scripten sen.
Och en förutsättning för att skriva bra frågor är ofta att databasen är väl upställd. Tveka inte att bygga om om det behövs.
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-03, 12:57 #6
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Kommer nog använda mig av följande:
$sql = 'SELECT * FROM `tabell` WHERE `typ` = \'bil\' ORDER BY `id` DESC';

Och sedan måste jag välja ut varje rad för sig, hur?
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-03, 13:01 #7
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Kanske ska jag räkna antalet rows efter select
$num = mysql_num_rows($result);
Och sedan skapa ny numrering
$y = $num;
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-03, 13:12 #8
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Detta verkar funka fram till att jag gör en SELECT.
Sedan uppstår problem när jag ska välja varje rad för sig, för id columnen blir t.ex. 6, 3, 1 istället för 9, 8, 7, 6, 5, 4, 3, 2, 1

Finns det ingen funktion att bara välja de första 10 raderna av selektionen var för sig?

$sql = 'SELECT * FROM `tabell` WHERE `typ` = \'bil\' ORDER BY `id` DESC';

Alltså typ funktion för att:
VÄLJ rad 1 uppifrån från selektionen $sql
VÄLJ rad 2 uppifrån från selektionen $sql ... o.s.v.
Timofey är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-03, 13:17 #9
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
eg0master eg0master är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Oct 2004
Inlägg: 898
Eftersom ingen annan verkar reagera på det så får väl jag göra det.
Du behöver först av allt lära dig lite om databaser. Det sätt du jobbar med (mysql_fetch_row(mysql_query(...))) är extrem ineffektivt eftersom du dels gör om frågan varje gång (fast det är olika rader urt samma tebell du vill ha) och gör allt förutom fråga ett svårare. istället skall du köra:
Kod:
$rs = mysql_query(SQL_SATS);
some kind of loop {
 $row = mysql_fetch_row($rs);
}
Då blir det nog enklare för dig att dels skapa en SQL sats som hämtar just det du vill ha och att jobba med de olika raderna. Samtidigt som frågan bara körs en gång.
eg0master är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-03, 14:05 #10
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Timofey Timofey är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2006
Inlägg: 2 041
Citat:
Originally posted by eg0master@Jan 3 2007, 14:17
istället skall du köra:
Kod:
$rs = mysql_query(SQL_SATS);
some kind of loop {
 $row = mysql_fetch_row($rs);
}
Ja, det kan jag prova med, men var anger jag radnummer? eller är det ett värde jag ska ha i loopen som jag plussar på upp till t.ex. 10 och sedan ...?

Okey, vänta med att svara... jag ska lära mig lite mer på egen hand.
Timofey är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 13:58.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017