Just nu i M3-nätverket
Jump to content

Array


jompa tompa

Recommended Posts

jompa tompa

Hej,

 

ett litet problem som jag behöver hjälp med. Ibland är man lite långsam, men då har man ju er :D

 

Jag har en array med några id-nummer i och jag vill hämta namnen ur en tabell (där id-nummerna också finns). Det känns enkelt, men det står ändå helt still.

 

Nån?

 

[inlägget ändrat 2003-03-24 14:21:25 av jompa tompa]

Link to comment
Share on other sites

Det finns flera sätt att lösa detta på. Antingen loopar du igenom arrayen och frågar databasen vilka namn som tillhör vilka id'n i arrayen.

 

Exempel:

 

SELECT * FROM tabellen WHERE id = $array[0]

(Detta är resurskrävande om du ska hämta många namn, men är det bara ett fåtal så är det väl ok)

 

Eller så hämtar du ner all data direkt, stoppar in i en ny array och matchar de två arrayerna mot varandra.

 

Exempel:

 

SELECT * FROM tabellen

(Helt värdelöst sätt att lösa det på egentligen...)

 

Eller så loopar du genom din första array för att fixa i ordning din SELECT sats för att fråga efter allting på en gång...

 

$sql = "SELECT id,namn FROM tabellen WHERE id = ";

$i = 1;
$numberOfElements = count($array);

foreach ($array as $tmp) {
if ($i != $numberOfElements) {
	$sql .= "{$tmp} or ";
} else {
	$sql .= $tmp;
}
$i++;
}

Detta tror jag är det bästa sättet att lösa det på ur resurssynpunkt, men eftersom det finns så många olika sätt att lösa det här på så kan jag säkert ha fel. Jag kan ju inte tänka på allt åt dig! :)

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

[inlägget ändrat 2003-03-24 15:04:46 av Bj0rN]

Link to comment
Share on other sites

jompa tompa

Tack!

 

Jag använde ditt sista exempel och det funkade precis som jag ville!

 

(fick dock lägga till ett

id = 

på på raden

$sql .= "{$tmp} or "; 

som du hade glömt)

 

Tack!

 

Link to comment
Share on other sites

Ja se på tusan, hur kunde jag glömma det?

 

Fast å andra sidan har jag ju varit uppe i närmare 30 timmar i streck nu, så jag får väl bli ursäktad kanske? :)

 

Varför lägger de Oscarsgalan på en söndag för? Usch va jobbigt det blir att jobba då... ARRGHH

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

jompa tompa

Förresten,

när du ändå bevakar och verkar kunna allt. En liten SQL-fråga...

 

Kan man sortera (ORDER BY) tex P först, sen i bokstavsordning. Alltså de träffar som börjar på P ska komma först.

 

 

 

Link to comment
Share on other sites

Förresten,

när du ändå bevakar och verkar kunna allt. En liten SQL-fråga...

Nja, allt är kanske att ta i! :)

 

Kan man sortera (ORDER BY) tex P först, sen i bokstavsordning. Alltså de träffar som börjar på P ska komma först.

ORDER BY name DESC sorterar på namn i bokstavsordning. Du kan dock inte börja direkt på P sådär och sedan fortsätta (tror jag), om du nu inte ändrar SELECT satsen så att du söker efter allting som börjar på P:

 

SELECT * FROM tabellen WHERE Name LIKE 'P%'

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

Vad har du för dbms?

Om du har MSSQL så kan du göra en union på två frågor:

SELECT * FROM tabellen ..... WHERE somecolumn LIKE 'P%' and id = ...

UNION ALL

SELECT * FROM tabellen ..... WHERE somecolumn [color="#0000ff"] NOT[/color] LIKE 'P%' and id = ...

annars får du väl göra 2 anrop till databasen där de första hämtar de som börjar på P och det andra där de inte börjar på P. För att sedan fylla din array.

//Telle

 

 

Link to comment
Share on other sites

Så sant så sant! Det finns tydligen UNION i version 4 av MySQL oxå. Så om du kör det så är det lugnt, annars kan du ju följa exemplet i kommentarerna i manualen för att emulera en union, men då är nog kanske två frågor att föredra. http://www.mysql.com/doc/en/UNION.html

 

Unions är något du inte ska använda dig för mycket av heller, det är inte det snabbaste, jag vet flera db experter som skyr union som pesten....

 

--

Some say I am crazy.. but the Voices in my head disagree...

 

Link to comment
Share on other sites

jompa tompa

Okej, jag var lite inne på det spåret, men jag tänkte att man kan ju fråga om det finns ett enklare sätt innan man börjar ge sig på det.

 

Tack ändå!

 

Link to comment
Share on other sites

En mycket bättre lösning än UNIONS är följande, som använder sig av enkel SQL-syntax.

Beroende lite på vilken databas du kör så heter funktionen SUBSTRING() lite olika, men följande fungerar exempelvis för MySQL:

SELECT * FROM tabell ORDER BY SUBSTRING(namn,1,1) = 'P' DESC, namn

 

Den listar då alla som börjar med P först, och sorterar sedan efter kolumnen 'namn'.

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...